使用xmlreader和C#将Children作为字符串
本文关键字:字符串 Children xmlreader 使用 | 更新日期: 2023-09-27 18:20:03
我在c#中使用xmlreader解析xml字符串,但在解析时,有时我需要获得节点的全部内容,包括带有标记的子节点,并且仍然能够继续解析。
ReadInnerXML和ReadOutterXML为我分解了
示例XML:
<?xml version="1.0" standalone="yes"?>
<main>
<parse1> //finding this will get full inner or outter xml - either one - my issue
<parse2 /> // even getting the children above might still need parse chldren
<negligeable /> // not all children interest me
</parse1>
<parse3>some text</parse3> // not all children of main are the same but all need be parsed
</main>
希望这能让你大致了解我需要什么
我现在可以解析2和3,并忽略我不需要的内容,但如果我在找到标记时使用ReadInnerXML或ReadOutterXML,它将不允许我解析任何其他内容,甚至不允许我分析外部的标记。
ReadInnerXML和ReadOutterXML确实正确地返回了我需要的文本,但导致其他所有内容都无法解析
编辑:根据blinkenlight建议,部分代码:
using (XmlReader reader = XmlReader.Create(new StringReader(XmlString)))
{
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
switch (reader.Name)
{
case "parse1":
Console.WriteLine("Contents of Parse 1: {0}", ?function here?);
break;
case "parse2":
Console.WriteLine("Parse 2 tag exists");
break;
case "parse3":
Console.WriteLine("Contents of Parse 3: {0}", Reader.ReadElementContentAsString());
break;
}
break;
}
}
}
结果应该是(给定测试xml)
Contents of Parse 1: <parse2 /><negligeable />
Parse 2 tag exists
Contents of Parse 3: some text
我也在尝试ReadSubTree
有什么提示吗?
基本上readinnerxml一直读到最后,XmlReader只向前。您可以使用XmlDocument,或者用另一种方法,从相同的Xml内容创建另一个读取器,读取到原始文件中的位置,获取字符串并将"副本"放入bin中
使用XmlDocument
,您可以轻松地循环浏览xml元素并打印您想要的
例如:
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(XmlString);
string parse1_Content = xmlDocument.GetElementsByTagName("parse1")[0].InnerXml;
Console.WriteLine("Contents of Parse 1: " + parse1_Content);
if(xmlDocument.GetElementsByTagName("parse2") > 0)
Console.WriteLine("Parse 2 exists");
string parse3_Content = xmlDocument.GetElementsByTagName("parse1")[0].InnerText;
Console.WriteLine(parse3_Content);