如何使用xmldocument类和xpath从xml过滤数据

多娜·巴特

我有xml存储在字符串变量中。从该xml中,我需要根据StandardValue过滤数据我只想提取那些StandardValue不为null且不为空的记录我试过了,但是我的代码没有用。

string xmldoc= @"<?xml version=""1.0"" encoding=""utf-8""?>
<TickerBrokerStandardDateLineitem>
  <Ticker />
  <TickerID />
  <TickerBrokerStandardDateLineitemValues>
    <TickerBrokerStandardDateLineitemValue>
      <TabName>Consensus Model</TabName>
      <StandardDate>1Q 2010</StandardDate>
      <BRTab>Income Statement</BRTab>
      <BRLineItem>NET REVENUES</BRLineItem>
      <Action>Extracted</Action>
      <StandardLineItem>Net Revenue</StandardLineItem>
      <StandardValue>329.623</StandardValue>
    </TickerBrokerStandardDateLineitemValue>
    <TickerBrokerStandardDateLineitemValue>
      <TabName>Consensus Model</TabName>
      <StandardDate>2Q 2010</StandardDate>
      <BRTab>Income Statement</BRTab>
      <BRLineItem>NET REVENUES</BRLineItem>
      <Action>Extracted</Action>
      <StandardLineItem>Net Revenue</StandardLineItem>
      <StandardValue></StandardValue>
    </TickerBrokerStandardDateLineitemValue>
    <TickerBrokerStandardDateLineitemValue>
      <TabName>Consensus Model</TabName>
      <StandardDate>2Q 2010</StandardDate>
      <BRTab>Income Statement</BRTab>
      <BRLineItem>NET REVENUES</BRLineItem>
      <Action>Extracted</Action>
      <StandardLineItem>Net Revenue</StandardLineItem>
      <StandardValue/>
    </TickerBrokerStandardDateLineitemValue>
  </TickerBrokerStandardDateLineitemValues>
</TickerBrokerStandardDateLineitem>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmldoc);
XmlNodeList nodeList = doc.GetElementsByTagName("TickerBrokerStandardDateLineitemValue");
List<string> list = new List<string>();
foreach (XmlNode item in nodeList)
{
    foreach (XmlElement i in item)
    {
        if (i.Name == "StandardValue")
        {
            if (i.InnerText == string.Empty)
            {
                list.Add(item.OuterXml);
            }
        }
    }
}
string a = string.Empty;
foreach (var item in list)
{
    a = doc.InnerXml.Replace(item, "");
}

string str1 = doc.OuterXml;

我上面的代码不起作用。基本上,如何使用xpath进行筛选,筛选器仅返回那些StandardValue不为null且不为空的记录

如何用XmlDocument类而不是xdocument实现它

最后,我必须将过滤后的记录的xml存储到字符串中。我知道XmlDocument类具有返回完整xml的外部xml属性。

给我示例代码,它将返回过滤器记录和存储的过滤器记录xml到字符串中。

EylM

假设您在问题中提供了输入字符串。

这将选择所有具有StandardValue元素且不是空白或空格(normalize-space)的TickerBrokerStandardDateLineitemValue值

标准化空间

从字符串中去除开头和结尾的空格,将空格字符序列替换为一个空格,然后返回结果字符串。

var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlStr); // <input from the question>

var nodes = xmlDoc.SelectNodes("//TickerBrokerStandardDateLineitemValue[StandardValue and string-length(normalize-space(StandardValue))]");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章