【问题标题】:Check if element exists in XML using c#使用c#检查XML中是否存在元素
【发布时间】:2014-11-16 01:07:39
【问题描述】:

当我在第 i 个文档anything_start_i.xml 中看到有<identifier>value</identifier> 元素时,为什么我会得到hasIdentifier 变量的错误值。

XDocument doc = XDocument.Load(args[0] + "/?verb=GetRecord&metadataPrefix=p3dm&identifier=" + i);
doc.Save("anything_start" + i + ".xml");
bool hasIdentifier = doc.Elements("identifier").Any();
Console.WriteLine(hasIdentifier);

尝试使用后代而不是元素,但又是错误的。

XML:

<?xml version="1.0" encoding="utf-8"?>
    <OAI-PMH xmlns="..." xmlns:xsi="..." xsi:schemaLocation="...">
      <responseDate>...</responseDate>
      <request verb="GetRecord" identifier="1"</request>
      <GetRecord>
        <record>
          <header>
            <identifier>1</identifier>
            <datestamp>...</datestamp>
          </header>
          <metadata>
            <P3DM xmlns="..." xsi:schemaLocation="...">
              <MODELINFOID>1</MODELINFOID>
              <TITLE>Roth</TITLE>
  ....

好吧,我想保存所有文档,并在不再有文档时尝试停止保存(实际上有但没有有意义的数据)。所以,我就是这样开始的:

static void Main(string[] args)
{
  var i = 1;
  bool work = true;
  do{
    XDocument doc = XDocument.Load(args[0] + "/?verb=GetRecord&metadataPrefix=p3dm&identifier=" + i);
    bool hasIdentifier = doc.Elements("identifier").Any();
    if (hasIdentifier) {
        doc.Save("anything" + i + ".xml");
        i++;
     }else{ 
        work = false;
     }
  } while (work);

【问题讨论】:

  • 请添加示例输入/输出。如果您的 XML 很大,请仅包含相关部分。
  • 请显示示例 XML(有效但很小,5-7 行)。可能重复许多“为什么x: 会破坏我在 XML 中的搜索”AKA“如何使用命名空间来选择节点”中的一个。
  • 确实有默认命名空间。已经有几个关于它的问题 - 即检查stackoverflow.com/questions/13040926/…。 (应该是重复的,但没有投票)。

标签: c# xml


【解决方案1】:
XNamespace ns = "you namespace goes here";
bool hasIdentifier = doc.Descendants(ns + "identifier").Any();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多