2016-04-28 16 views
1
<?xml version="1.0" encoding="utf-8"?> 
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"> 
    <Body> 
    ...more stuff... 
    <Textbox Name="Textbox93"> 
     <CanGrow>true</CanGrow> 
     <KeepTogether>true</KeepTogether> 
     <Paragraphs> 
     <Paragraph> 
      <TextRuns> 
      <TextRun> 
       <Value rd:TranslationKey="DATE">Date</Value> 
       <Style> 
       <FontSize>11pt</FontSize> 
       <FontWeight>Bold</FontWeight> 
       <Color>#444444</Color> 
       </Style> 
      </TextRun> 
      </TextRuns> 
      <Style /> 
     </Paragraph> 
     </Paragraphs> 
     <rd:DefaultName>Textbox93</rd:DefaultName> 
     <Style> 
     <Border> 
      <Color>LightGrey</Color> 
      <Style>Solid</Style> 
     </Border> 
     <BackgroundColor>#82bad9</BackgroundColor> 
     <PaddingLeft>2pt</PaddingLeft> 
     <PaddingRight>2pt</PaddingRight> 
     <PaddingTop>2pt</PaddingTop> 
     <PaddingBottom>2pt</PaddingBottom> 
     </Style> 
    </Textbox> 

これは、より大きいxmlドキュメント内の繰り返し構造です。私はこのようにすべてのノードを引っ張ろうとしています:<Value rd:LocId="DATE_VALUE">Date</Value>。私はそうノードを取得しようとしています:xmlノードを属性で選択できないのはなぜですか?

var nsmgr = new XmlNamespaceManager(doc.NameTable); 

nsmgr.AddNamespace("nm", "http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"); 
nsmgr.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"); 

var nodes = doc.DocumentElement.SelectNodes("//Value[@rd:TranslationKey]", nsmgr); 

私のノードの数は0です、なぜ私は分かりません。これは私がウェブ上で見ている例のようです。

+2

GAH、私は.NETでXML名前空間での作業が嫌い。 '// nm:Value [@rd:TranslationKey]'を試しましたか? – Cameron

+0

息子の...魅力のように働いた@Cameron。私は間違ったことをよく知っていましたが、私は見落とされた何か愚かなものになるでしょう。クイックアンサーを書くと、私はあなたにいくつかのポイントを得るでしょう。ありがとう。 – Yatrix

答えて

3

ああ、XML名前空間ではありません!

XML文書に名前空間がある場合、それがデフォルトの名前空間であっても、すべてのノード名(したがってクエリ)にはその名前空間の接頭辞を付ける必要があります。

だからあなたのコードは、罰金、あなたがnm:Valueの接頭辞ば動作しますので、同じよう:

var nodes = doc.DocumentElement.SelectNodes("//nm:Value[@rd:TranslationKey]", nsmgr); 
+0

もう一度お手伝いをしていただきありがとうございます。名前空間が得られる前に実行して隠す方が良い! – Yatrix

+0

母、問題ありません:-) – Cameron