我正在使用XmlReader迭代一些XML。一些XML实际上是HTML,我想从节点获取文本内容。
示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<p>Here is some <b>data</b></p>
</data>
示例代码:
using (XmlReader reader = new XmlReader(myUrl))
{
while (reader.Read())
{
if (reader.Name == "p")
{
// I want to get all the TEXT contents from the this node
myVar = reader.Value;
}
}
}
这不能得到我所有的内容。在这种情况下,如何从
节点获取所有内容?
答案 0 :(得分:7)
使用ReadInnerXml:
StringReader myUrl = new StringReader(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<data>
<p>Here is some <b>data</b></p>
</data>");
using (XmlReader reader = XmlReader.Create(myUrl))
{
while (reader.Read())
{
if (reader.Name == "p")
{
// I want to get all the TEXT contents from the this node
Console.WriteLine(reader.ReadInnerXml());
}
}
}
或者,如果您也想跳过<b>
,可以使用辅助阅读器作为子树,只读取文本节点:
StringReader myUrl = new StringReader(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<data>
<p>Here is some <b>data</b></p>
</data>");
StringBuilder myVar = new StringBuilder();
using (XmlReader reader = XmlReader.Create(myUrl))
{
while (reader.Read())
{
if (reader.Name == "p")
{
XmlReader pReader = reader.ReadSubtree();
while (pReader.Read())
{
if (pReader.NodeType == XmlNodeType.Text)
{
myVar.Append(pReader.Value);
}
}
}
}
}
Console.WriteLine(myVar.ToString());
答案 1 :(得分:1)
我无法对其他人进行投票或评论。回答,所以我只想说 carlosfigueira 击中头部的钉子,这就是你如何读取元素的文本值。他的回答极大地帮助了我。
为了解释这里我的代码:
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
{
if (reader.Name == "CharCode")
{
switch (reader.ReadInnerXml())
{
case "EUR":
{
reader.ReadToNextSibling("Value");
label4.Text = reader.ReadInnerXml();
}
break;
case "USD":
{
reader.ReadToNextSibling("Value");
label3.Text = reader.ReadInnerXml();
}
break;
case "RUB":
{
reader.ReadToNextSibling("Value");
label5.Text = reader.ReadInnerXml();
}
break;
case "RON":
{
reader.ReadToNextSibling("Value");
label6.Text = reader.ReadInnerXml();
}
break;
}
}
}
break;
}
}
我可以在此处找到我正在阅读的文件:http://www.bnm.md/md/official_exchange_rates?get_xml=1&date= (您必须以DD.MM.YYYY格式添加日期才能获得.XML)
答案 2 :(得分:0)
我建议您使用HtmlAgilityPack这是一个成熟且稳定的库来执行此类操作。它负责获取html,将其转换为xml,并允许您使用XPATH选择您喜欢的节点。
在你的情况下,它就像执行
一样简单 HtmlDocument doc = new HtmlWeb().Load(myUrl);
string text = doc.DocumentNode.SelectSingleNode("/data/p").InnerText;