Tag: xml

如何在C#中使用XmlSerializer将字节数组序列化为XML?

假设我们有一个结构,它的数据由使用Marshal.PtrToStructure的非托管字节数组提供。 C#结构布局: [StructLayout(LayoutKind.Sequential, Size = 128, CharSet = CharSet.Ansi, Pack = 1)] public struct MNG_Y_Params { public byte Number; public byte Version; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] OliNumber; public byte InterfaceType; } 字节数组表示非托管代码中的(ascii)字符串。 此结构是另一个结构的成员(具有一些其他成员): public struct MyData { public int ID; public StructType structType; [XmlElement(ElementName=”MNG_Y_Params”)] public MNG_Y_Params y_params; [XmlElement(ElementName = “SimpleStruct2”)] public SimpleStruct2 ss2; […]

如果元素具有xmlns属性,则XDocument和Linq返回null

新手与XDocuments和Linq,请建议一个解决方案,从xml字符串中的特定标签检索数据: 如果我有来自webservice响应的XML字符串(为了方便我格式化了xml): Hello! 使用以下代码,仅当GetCashFlowReportResponse标记没有”xmlns”属性时,才能获取该值。 不知道为什么? 否则,它始终返回null。 string inputString = “Hello!” XDocument xDoc = XDocument.Parse(inputString); //XNamespace ns = “http://tempuri.org/”; XNamespace ns = XNamespace.Get(“http://tempuri.org/”); var data = from c in xDoc.Descendants(ns + “GetCashFlowReportResponse”) select (string)c.Element(“GetCashFlowReportPdf”); foreach (string val in data) { Console.WriteLine(val); } 我无法更改Web服务以删除该属性。 有没有更好的方法来读取响应并将实际数据返回给用户(以更易读的forms)? 编辑: 解决方案: XDocument xDoc = XDocument.Parse(inputString); XNamespace ns = “http://tempuri.org/”; var data […]

删除序列化程序创建的空xmlns

我有一个由“添加服务引用…”操作生成的对象,我手动使用我编写的通用序列化程序对其进行序列化。 我的问题是数据契约有一些内部对象。 序列化程序将空名称空间属性添加到内部对象的起始标记。 有没有办法阻止这种情况发生?

使用LINQ覆盖或忽略C#中未声明的实体

我有一个小实用程序,它使用LINQ查找XML文件中的某些内容。 它可以非常快速而且很好地处理它们的大量收集。 但是,某一批文件中约有20%无法读取并被跳过,因为度数符号的存在为°而失败° 在文件中。 这是“对未申报实体’deg’的引用。” 以前的问题是关于。 上一个问题中提供的解决方案无法直接应用于此处。 我不能自由地修改文件,并且复制它们以及替换实例或在副本中插入标签似乎效率低下。 让LINQ忽略未声明的实体的最佳方法是什么,这对我的程序无论如何都没有影响? 或者是否有一种很好的方法可以让XDocument.Load预先提供一些实体声明?

如何在XML中找到特定节点?

我必须从以下XML中读取xml节点“name”,但我不知道该怎么做。 这是XML: Google Pacman http:\\www.google.de 码: using System.Xml; namespace SRCDSGUI { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { XmlDocument doc = new XmlDocument(); doc.Load(Application.StartupPath + @”\games.xml”); XmlElement root = doc.DocumentElement; XmlNodeList nodes = root.SelectNodes(“//games”); foreach (XmlNode node in nodes) { listBox1.Items.Add(node[“game”].InnerText); } } […]

xsd.exe使用数组中的多个元素生成c#

我有一组XML模式文件提供给我。 我无法更改XML,因为这些有时会更新。 我正在使用xsd.exe将架构文件转换为生成的c#代码。 我不能使用任何第三方工具。 其中一个XML模式文件的一部分显示如下: 当转换为c#时,我得到如下结果: [System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “4.0.30319.1”)] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute(“code”)] [System.Xml.Serialization.XmlTypeAttribute(Namespace = “http://abcxyz.com”)] public partial class LocationType { private object[] itemsField; private ItemsChoiceType[] itemsElementNameField; /// [System.Xml.Serialization.XmlElementAttribute(“Address”, typeof(string), Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.Xml.Serialization.XmlElementAttribute(“City”, typeof(string), Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.Xml.Serialization.XmlElementAttribute(“LocNum”, typeof(string), Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.Xml.Serialization.XmlElementAttribute(“Longitude”, typeof(decimal), Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.Xml.Serialization.XmlElementAttribute(“State”, typeof(LocationTypeState), Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] [System.Xml.Serialization.XmlChoiceIdentifierAttribute(“ItemsElementName”)] public object[] Items […]

在XSLT中最后一次出现字符后获取子字符串

我在XML文件中有一个字符串,看起来类似于: M:Namespace.Class.Method(Something a,something b) 句点(。)字符的数量是有用的,这意味着它在本例中只能是2,但可以更多。 我想使用XSLT从最后一个’。’获取该字符串的子字符串。 性格,所以我只剩下: 方法(某事,某事b) 我无法使用标准的substring / substring-after函数实现此目的。 是否有捷径可寻?

使用C#和XDocument / XElement来解析Soap响应

以下是来自SuperDuperService的示例soap响应: 32347 出于某种原因,当我试图抓住“结果”的后代或元素时,我得到了空。 它与命名空间有关吗? 有人可以提供从中检索结果的解决方案吗?

Visual Studio Intellisense的评论来自哪里?

Visual Studio项目可以选择创建XML文档文件 。 我知道,如果您想运行Sandcastle或NDoc等程序或创建MSDN样式API文档,XML文档文件会非常有用。 精细。 我不在乎。 根据此链接: http : //msdn.microsoft.com/en-us/library/s0we08bk.aspx 将/ doc开关添加到Visual Basic,C#或C ++编译器命令行时,会生成一个.xml文件,作为IntelliSense文档的基础。 因此,我认为Intellisense注释可以从这些生成的XML文件中显示出来。 但我创建了一个小测试应用程序,我在一个完全不同的项目中调用一个方法,XML注释出现在我的Intellisense中 – 我甚至没有保存MediaHelper类! 所以在这种情况下,显然没有Intellisense使用的.xml文件。 鉴于这一切,Intellisense从哪里获得它的垃圾? 谢谢!

没有XmlInclude的序列化

我正在使用.NET序列化反序列化一个名为Method的类。 Method包含实现IAction的对象列表。 我最初使用[XmlInclude]属性来指定实现IAction所有类。 但是现在,我想改变我的程序来加载目录中的所有dll并删除实现IAction的类。 然后,用户可以反序列化包含实现IAction的操作的文件。 我不再控制实现IAction的类,因此我不能使用[XmlInclude] 。 有没有办法在运行时设置此属性? 或者为实现类设置了类似的属性? public class Method { public List Actions = new List(); } public interface IAction { void DoExecute(); } public static Type[] LoadActionPlugins(string pluginDirectoryPath) { List pluginTypes = new List(); string[] filesInDirectory = Directory.GetFiles(pluginDirectoryPath, “*.dll”, SearchOption.TopDirectoryOnly); foreach (string pluginPath in filesInDirectory) { System.Reflection.Assembly actionPlugin = System.Reflection.Assembly.LoadFrom(pluginPath); Type[] […]