Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML:从XML中检索特定值_C#_Xml - Fatal编程技术网

C# XML:从XML中检索特定值

C# XML:从XML中检索特定值,c#,xml,C#,Xml,从下面的XML中,我想找到一个基于雇主的值 <?xml version="1.0" encoding="UTF-8"?> <Document> <Details> <Employer>Taxes</Employer> <Adr> <Strt>Street</Strt> <Twn>Town</Twn

从下面的XML中,我想找到一个基于雇主的值

<?xml version="1.0" encoding="UTF-8"?>
<Document>
    <Details>
        <Employer>Taxes</Employer>
        <Adr>
            <Strt>Street</Strt>
            <Twn>Town</Twn>
        </Adr>
    </Details>
    <DetailsAcct>
        <Recd>
            <Payroll>
                <Id>9</Id>
            </Payroll>
        </Recd>
        <br>
            <xy>A</xy>
        </br>
    </DetailsAcct>
</Document>
但是它给了我一个
无效的令牌
错误。
我缺少什么?

错误是由于
[contains(…])
引起的,请注意,缺少右括号。由于您希望返回
Employer
元素,因此无需在此处输入
祖先::Employer

//w:Document//w:Employer[contains(., 'Taxes')]
如果发布的XML与实际XML的结构相似(名称空间除外),最好使用更具体的XPath,即避免使用昂贵的
/

/w:Document/w:Details/w:Employer[contains(., 'Taxes')]

此错误是由于
[包含(…])
引起的,请注意,右括号丢失。由于您希望返回
雇主
元素,因此不需要在此处输入
祖先::雇主

//w:Document//w:Employer[contains(., 'Taxes')]
如果发布的XML与实际XML的结构相似(名称空间除外),最好使用更具体的XPath,即避免使用昂贵的
/

/w:Document/w:Details/w:Employer[contains(., 'Taxes')]
另一种选择是使用

如果XML位于字符串中:

string xml = "<xml goes here>";
XDocument document = XDocument.Parse(xml);
XElement element = document.Descendants("Employer").First();
string value = element.Value;
如果需要,您还可以找到具有特定值的雇主元素:

XElement element = document.Descendants("Employer").First(e => e.Value == "Taxes");
注意:如果找不到具有指定值的元素,这将引发异常。如果不可接受,则可以将.First(…)替换为.FirstOrDefault(…),如果找不到元素,它只会返回null。

另一种方法是使用

如果XML位于字符串中:

string xml = "<xml goes here>";
XDocument document = XDocument.Parse(xml);
XElement element = document.Descendants("Employer").First();
string value = element.Value;
如果需要,您还可以找到具有特定值的雇主元素:

XElement element = document.Descendants("Employer").First(e => e.Value == "Taxes");

注意:如果找不到具有指定值的元素,这将引发异常。如果不可接受,则可以将.First(…)替换为.FirstOrDefault(…)如果找不到元素,它只会返回null。

您想要的输出是什么?想要取回名为taxes的雇主当您的XML不在命名空间中时,您为什么使用
w:
命名空间前缀?您想要的输出是什么?想要取回名为taxes的雇主您为什么使用
w:
当您的XML不在名称空间中时,名称空间前缀?全部为true,但您可能还想质疑在XML中未使用名称空间的情况下使用名称空间前缀(
w:
)的问题。在XML中有许多节点。我需要检索包含“Taxes”的特定节点尝试了以下/w:Document/w:Details/w:Employer[contains(,'Taxes')]/祖先::Employer,nsmgr但返回“null”@vicky
w:Employer[contains(,,'Taxes')]
已经涵盖了这一点,现在不需要
祖先::Employer
@vicky,我无法正确地“猜测”情况(建议的XPath对实际的XML不起作用),我建议发布最小但完整的XML示例,演示上述XPath是如何失败的,即返回
null
。确保人们可以轻松地复制粘贴XML并根据代码/XPathAll true对其进行测试,但您可能还想质疑名称空间前缀的使用(
w:
)在XML中没有使用名称空间。在XML中有许多节点。我需要检索包含“Taxes”的特定节点。尝试了以下操作/w:Document/w:Details/w:Employer[contains(,'Taxes')]/祖先::Employer,nsmgr,但返回“null”@vicky
w:Employer[contains(,'Taxes')]
已经涵盖了这一点,没有必要使用
祖先::雇主
@vicky Now,因为我没有正确地“猜测”情况(XPath建议对实际的XML不起作用),我建议发布最小但完整的XML示例,演示上述XPath如何失败,即返回
null
。确保人们可以轻松地复制粘贴XML并根据代码/XPath测试它