我正在使用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确实返回我需要的文本,但导致其他所有内容都无法解析
编辑:根据dasblinkenlight sugestion,一些代码:
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
任何提示?
答案 0 :(得分:1)
基本上,readinnerxml一直读到最后,而XmlReader只是前传。 您可能会使用XmlDocument,或者其他方式,使用相同的Xml内容创建另一个阅读器,读取您在原始位置的位置,获取您的字符串并装入“副本”
答案 1 :(得分:1)
使用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);