0
私はXMLファイルを読み込み、フィールドの値を見つけようとしています。XElement.Decendents.First xmlフィールドが見つかりません
私は、ファイル「MyMessage.txt」から読んでいます:ファイルが正しく読み込まれ、コンソールに書き込まれ
// 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を検索します。ここでは
<?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>
コードです失敗する。
私はコード内のファイルを作成し、これを繰り返すために、この時間を試みたが、同じコードが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);
}
解像度
フィールドを読み込む行が名前空間を含むように変更
TxId
という要素を探している
Console.WriteLine("TxId is:" + element.Descendants(element.Name.Namespace + "TxId").First().Value);
ありがとうございました。要素がコードでビルドされた例では、これはどうして必要ではなかったのでしょうか。 XElementに文字列を読み込むと、ファイル内の名前空間が無視されると思いますか? – Yoav
コードで作成した例は、同じXMLを生成しません。あなたの最初の行の出力で*非常に慎重に見てください。 'ReqHdr'要素と' ReqTxInf'要素に 'xmlns =" "'があることがわかります。 –