Извлечь определенный тег XML в файл XML с помощью XmlDocument
У меня есть файл XML, что я пытаюсь сделать, это проанализировать весь файл и найти определенный тег XML (в моем случае я ищу queryString
) и при обнаружении тега вытащите соответствующий ему внутренний текст. я использую XmlDocument
и используя XmlDocument.SelectNodes("/stringList")
,
При этом null
значение возвращается. Я что-то упускаю?
XmlDocument xml = new XmlDocument();
Jrxml.Load(file_path);
XmlNodeList xml_nodes = xml.SelectNodes("/stringList");
foreach (XmlNode jr_node in xml_nodes)
{
XmlNode query_node = jr_node.SelectSingleNode("queryString");
}
Во время выполнения он не входит в цикл for xml_nodes
значение null
XML-файл выглядит следующим образом.
<stringList>
<property1/>
<property2/>
<style>
<queryString>
</queryString>
</style>
<queryString>
</queryString>
</stringList>
3 ответа
Решение
Если вы ищете только тег "queryString", я предлагаю вам использовать метод XmlDocument GetElementsByTagName. Рассматривать:
using System;
using System.Xml;
namespace TestCon
{
class Program
{
private static XmlDocument TestDoc;
public static void Main(string[] args)
{
TestDoc = new XmlDocument();
TestDoc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?>"+
"<stringList>\n"+
"<property1/>\n"+"<property2/>\n"+
"<style>\n"+"<queryString>Who's on fist."+"</queryString>\n"+
"</style>\n"+"<queryString>Who's on second."+"</queryString>\n"+
"</stringList>");
XmlNodeList elemList = TestDoc.GetElementsByTagName("queryString");
foreach (XmlNode foundNode in elemList)
{
Console.WriteLine(foundNode.InnerText);
}
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
Вы получите ровно два узла, которые вы ищете:
Who's on first.
Who's on second.
Press any key to continue . . .
Я предпочитаю классы / функциональность XML, найденные в System.Xml.Linq:
XDocument doc = XDocument.Parse(xmlString);
foreach (XElement queryString in doc.Descendants("queryString"))
{
// do something with queryString.Value ...
}
Вы можете использовать XML Linq, как это
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
"<root>" +
"<stringList>" +
"<property1/>" +
"<property2/>" +
"<style>" +
"<queryString>" +
"</queryString>" +
"</style>" +
"<queryString>" +
"</queryString>" +
"</stringList>" +
"</root>";
XDocument doc = XDocument.Parse(xml);
var stringList = doc.Descendants("stringList").Select(x => new
{
property1 = x.Element("property1"),
property2 = x.Element("property2"),
style = x.Element("style"),
queryString = x.Element("queryString")
});
}
}
}