2016-11-24 4 views
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); 

答えて

2

- しかし、あなたの要素は、その祖先から継承された"urn:com.company:request.001"名前空間に暗黙的にです。

だからあなたが必要とする:

element.Descendants(ns + "TxId").First() 
+0

ありがとうございました。要素がコードでビルドされた例では、これはどうして必要ではなかったのでしょうか。 XElementに文字列を読み込むと、ファイル内の名前空間が無視されると思いますか? – Yoav

+1

コードで作成した例は、同じXMLを生成しません。あなたの最初の行の出力で*非常に慎重に見てください。 'ReqHdr'要素と' ReqTxInf'要素に 'xmlns =" "'があることがわかります。 –

関連する問題