C# 使用XElement获取嵌套元素
我试图从下面的xml中提取errorMessage元素,但由于它似乎找不到标记,因此出现了一个错误。知道我做错了什么吗?非常感谢C# 使用XElement获取嵌套元素,c#,xml,xelement,C#,Xml,Xelement,我试图从下面的xml中提取errorMessage元素,但由于它似乎找不到标记,因此出现了一个错误。知道我做错了什么吗?非常感谢 <order> <orderReference>ABCD</orderReference> <status>Error</status> <errors> <error> <errorCode>1102</errorCode> <errorMess
<order>
<orderReference>ABCD</orderReference>
<status>Error</status>
<errors>
<error>
<errorCode>1102</errorCode>
<errorMessage><![CDATA[ "Job with same reference already exists in file" ]]></errorMessage>
</error>
</errors>
试试这个:
value3 = element.Descendants("errorMessage").FirstOrDefault()?.Value;
不能直接访问子元素。您应该使用XPATH:errors/error/errorMessage
foreach (XElement element in doc.Descendants("order"))
{
string value = element.Element("orderReference").Value;
string value2 = element.Element("status").Value;
string value3 = "";
if (value2 == "Error")
{
value3 = element.Element("errors/error/errorMessage").Value;
}
Console.WriteLine(value + ' ' + value2 + ' ' + value3);
}
您还可以使用GetElementsByTagName
value3 = doc.GetElementsByTagName("errorMessage");
它将为可能遇到此问题的VB用户返回包含“errorMessage”的节点集合
Dim xe As XElement
'to load
' xe = XElement.Load("path / URI")
'for testing
xe = <order>
<orderReference>ABCD</orderReference>
<status>Error</status>
<errors>
<error>
<errorCode>1102</errorCode>
<errorMessage><![CDATA[ "Job with same reference already exists in file" ]]></errorMessage>
</error>
</errors>
</order>
'get first
Dim errMess As String = xe...<errorMessage>.FirstOrDefault.Value
'get ALL <errorMessage> elements
Dim ie As IEnumerable(Of XElement) = xe...<errorMessage>
For Each el As XElement In ie
Debug.WriteLine(el.Value)
Next
Dim xe As XElement
“装载
'xe=XElement.Load(“路径/URI”)
"测试",
xe=
ABCD
错误
1102
“先走一步
Dim errMess As String=xe…FirstOrDefault.Value
'获取所有元素
尺寸为IEnumerable(像素)=xe。。。
对于ie中的每个el作为元素
Debug.WriteLine(el.Value)
下一个
I get error System.Xml.XmlException:“名称中不能包含十六进制值0x2F的“/”字符。@user552769使用:value3=element.element(“//errors/error/errorMessage”).value;
Dim xe As XElement
'to load
' xe = XElement.Load("path / URI")
'for testing
xe = <order>
<orderReference>ABCD</orderReference>
<status>Error</status>
<errors>
<error>
<errorCode>1102</errorCode>
<errorMessage><![CDATA[ "Job with same reference already exists in file" ]]></errorMessage>
</error>
</errors>
</order>
'get first
Dim errMess As String = xe...<errorMessage>.FirstOrDefault.Value
'get ALL <errorMessage> elements
Dim ie As IEnumerable(Of XElement) = xe...<errorMessage>
For Each el As XElement In ie
Debug.WriteLine(el.Value)
Next