XElement.Decendents.First 未找到 xml 字段
XElement.Decendents.First not finding xml field
我正在尝试读取 XML 文件并查找字段的值。
我正在读取文件 "MyMessage.txt":
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:com.company:request.001">
<ReqHdr>
<AppInstanceId>AAAA</AppInstanceId>
</ReqHdr>
<ReqTxInf>
<PmtId>
<TxId>123456</TxId>
</PmtId>
<MsgTyp>REQUEST</MsgTyp>
</ReqTxInf>
</Document>
代码如下:
// Read XElement from file
element = XElement.Parse(System.IO.File.ReadAllText(
System.IO.Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"MyMessage.txt")));
try
{
Console.WriteLine(element);
Console.WriteLine("TxId is:" + element.Descendants("TxId").First().Value);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
文件被正确读取并写入控制台,但搜索TxId失败。
这次我尝试在代码中重复创建文件,同样的代码找到了 TxId:
// Create XEleemnt in code
XNamespace ns = "urn:com.company:request.001";
XElement element = new XElement(ns + "Document",
new XElement("ReqHdr",
new XElement("AppInstanceId", "AAAA")),
new XElement("ReqTxInf",
new XElement("PmtId",
new XElement("TxId", "123456")),
new XElement("MsgTyp", "request")));
try
{
Console.WriteLine(element);
Console.WriteLine();
Console.WriteLine("TxId is:" + element.Descendants("TxId").First().Value);
Console.WriteLine();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
分辨率
读取字段的行更改为包含名称 space
Console.WriteLine("TxId is:" + element.Descendants(element.Name.Namespace + "TxId").First().Value);
您在没有名称空间的情况下寻找名为 TxId
的元素 - 但您的元素 是 隐含在 "urn:com.company:request.001"
名称空间中,它继承自它的祖先。
所以你需要:
element.Descendants(ns + "TxId").First()
我正在尝试读取 XML 文件并查找字段的值。
我正在读取文件 "MyMessage.txt":
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:com.company:request.001">
<ReqHdr>
<AppInstanceId>AAAA</AppInstanceId>
</ReqHdr>
<ReqTxInf>
<PmtId>
<TxId>123456</TxId>
</PmtId>
<MsgTyp>REQUEST</MsgTyp>
</ReqTxInf>
</Document>
代码如下:
// Read XElement from file
element = XElement.Parse(System.IO.File.ReadAllText(
System.IO.Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"MyMessage.txt")));
try
{
Console.WriteLine(element);
Console.WriteLine("TxId is:" + element.Descendants("TxId").First().Value);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
文件被正确读取并写入控制台,但搜索TxId失败。
这次我尝试在代码中重复创建文件,同样的代码找到了 TxId:
// Create XEleemnt in code
XNamespace ns = "urn:com.company:request.001";
XElement element = new XElement(ns + "Document",
new XElement("ReqHdr",
new XElement("AppInstanceId", "AAAA")),
new XElement("ReqTxInf",
new XElement("PmtId",
new XElement("TxId", "123456")),
new XElement("MsgTyp", "request")));
try
{
Console.WriteLine(element);
Console.WriteLine();
Console.WriteLine("TxId is:" + element.Descendants("TxId").First().Value);
Console.WriteLine();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
分辨率
读取字段的行更改为包含名称 space
Console.WriteLine("TxId is:" + element.Descendants(element.Name.Namespace + "TxId").First().Value);
您在没有名称空间的情况下寻找名为 TxId
的元素 - 但您的元素 是 隐含在 "urn:com.company:request.001"
名称空间中,它继承自它的祖先。
所以你需要:
element.Descendants(ns + "TxId").First()