Tag: xmlreader

使用XmlReader和xsd.exe中的类反序列化Xml

好的,我在尝试学习XmlSerializer的过程中遇到了一些障碍。 我已经遵循了所有建议的步骤,但我的程序没有返回任何内容,或者返回null。 我创建了一个XML文件,如下所示: 然后我使用xsd.exe生成.xsd文件,它是: 创建架构后,我再次使用xsd.exe为我自动生成类,即: /// [System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “2.0.50727.3038”)] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute(“code”)] [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] [System.Xml.Serialization.XmlRootAttribute(Namespace = “”, IsNullable = false)] public partial class WeeklyJobs { private WeeklyJobsDailyJobs[] itemsField; /// [System.Xml.Serialization.XmlElementAttribute(“DailyJobs”, Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] public WeeklyJobsDailyJobs[] Items { get { return this.itemsField; } set { this.itemsField = value; } } } /// [System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “2.0.50727.3038”)] [System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] […]

c#whitespaces与XmlReader有关

我有一个简单的xml value1 value2 我正在使用IXmlSerializable来读取和编写带有DTO的xml。 以下代码工作得很好 XmlReader reader; … while( reader.Read() ){ Console.Write( reader.ReadElementContentAsString() ); } // outputs value1value2 但是,如果xml中的空格被删除,即 value1value2 或者我使用XmlReaderSettings.IgnoreWhitespace = true; ,代码只输出“value1”忽略第二个节点。 当我打印解析器遍历的节点时,我可以看到ReadElementContentAsString将指针移动到node2的EndElement ,但我不明白为什么会发生这种情况或如何解决它。 它是一个可能的XML解析器实现错误吗? =============================================== 这是一个示例代码和2 xml样本,可以产生不同的结果 string homedir = Path.GetDirectoryName(Application.ExecutablePath); string xml = Path.Combine( homedir, “settings.xml” ); FileStream stream = new FileStream( xml, FileMode.Open ); XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.IgnoreWhitespace […]

如何克隆MemoryStream对象?

我有一个MemoryStream对象,它由Stream类型参数传递 ( Stream是C#中的抽象类)。 我想克隆他,并创建另一个MemoryStream对象的一侧与原始的当前位置,并创建一个新的XMLReader ,所以我将能够阅读其内容。 这就是我做的,它不起作用(调试标有// * – > newReader有{None}值) 假设 :您在方法内部并具有Stream currentStream引用。 var x = new XmlReaderSettings(); x.IgnoreWhitespace = true; using (var newMemoryStream = new MemoryStream()) { stream.CopyTo(newMemoryStream); using (var newReader = XmlReader.Create(newMemoryStream,x)) //* { Doing some stuff… } }

使用c#解析XML数据

我一直在c#中使用XMLReaderClass挣扎一段时间,似乎无法得到这个概念。 基本上我想循环遍历XML文件,如果xml doc中的类别与我传递的类别相同,我想将其名称添加到List中。 这是xml 这是我的代码,我已经开始工作,但没有得到很远:( public ReadOnlyCollection GetProductsByCategory(string category) { List returnList = new List(); using (XmlReader productsReader = GetProductsReader()) { productsReader.MoveToContent(); while (productsReader.Read()) if(productsReader.NodeType == XmlNodeType.Element) { if (productsReader) { if productsReader } } } return new ReadOnlyCollection(returnList); }

当缩进xml时,XMLREADER会给出不同的结果

我在两个不同的文件中有相同的XML。 在一个文件中,XML缩进 – 另一个不缩进。 XML如下: 使用以下代码时,我得到两个文件的不同结果: XmlReaderSettings settings = new XmlReaderSettings { IgnoreComments = true, IgnoreWhitespace = false, IgnoreProcessingInstructions = true }; using (XmlReader reader = XmlReader.Create(invoiceStream, settings)) { reader.MoveToContent(); reader.Read(); var prevLocalname = reader.LocalName; var element = XNode.ReadFrom(reader) as XElement; var newLocalname = reader.LocalName; } 使用缩进文件,我得到以下值: prevLocalname = “”; newLocalname = “element1”; 如果文件没有缩进,我会得到以下值: prevLocalname […]

使用XMLReader解析问题(使用ReadSubTree)

我试图在我的CF应用程序中构建一个简单的XML to Controls解析器。 在下面的代码中,我试图解析的字符串如下所示: “Text1Text2” 我希望这个代码的结果将是一个带有两个标签的Panel。 但问题是当第一个Label被解析时,subreader.Read()在ParsePanelElementh方法中返回false,因此它不属于while语句。 由于我是新的XMLReader,我必须错过一些非常简单的东西。 任何帮助都会被贬低! 和平。 static class XMLParser { public static Control Parse(string aXmlString) { XmlReader reader = XmlReader.Create(new StringReader(aXmlString)); return ParseXML(reader); } public static Control ParseXML(XmlReader reader) { using (reader) { while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.LocalName == “Panel”) { return ParsePanelElement(reader); } if (reader.LocalName […]

获取xml属性值为string

我的xml文件有这样的东西: … … 那么我如何递归获取name属性的所有值并将它们添加到List或string[] 。 也许是一个foreach循环? 我遵循codemeit并且我一直收到错误: Data at the root level is invalid. Line 1, position 1. Data at the root level is invalid. Line 1, position 1.我的xml文件是 … … 新问题The ‘\’ character, hexadecimal value 0x5C, cannot be included in a name. 但是同一个文件。

如何使用XmlReader从XML中的特定子元素获取值?

这是XML字符串。 Question 1? abcdefg 123 Question 2? 12345678 123 那么如何通过给定的问题ID得到元素的值? 比方说,如果我给id值=“dd7e3bce-57ee-497a-afe8-e3d8d25e2671”,我想要返回字符串值abcdefg作为结果。 var xmlstr = “content from above xml example”; using (var reader = XmlReader.Create(new StringReader(xmlstr))) { while(reader.Read()) { if(reader.IsStartElement()) { var attr = reader[“id”]; if(attr != null && attr == “dd7e3bce-57ee-497a-afe8-e3d8d25e2671”) { if(reader.ReadToDescendant(“response”)) { result = reader.Value; // <= getting empty string? So what's wrong? […]

为什么文件流没有被xmlreader关闭

所以我在xmlreader使用文件流 using (XmlReader reader = XmlReader.Create(new FileStream(archivePath, FileMode.Open), readerSettings)) { reader.close() } 但是,进入xmlreader的文件仍然处于使用范围之后的锁定状态,很奇怪,我认为xmlreader会为我关闭文件流,不是吗? 感谢帮助。

如何阻止XMLReader抛出无效的XML字符exception

所以我有一些XML: my tagmy tag value &#xB;and my invalid Character 和XMLReader: using (XmlReader reader = XmlReader.Create(new StringReader(xml))) { while (reader.Read()) { //do my thing } } 我已经从这里实现了CleanInvalidCharacters方法,但由于“&#xB”尚未编码,因此不会被删除。 读者错误正在抛出.Read(); 有exception的行: hex值0x0B,是无效字符。