2

xpathが指定したノードを選択しない理由を解明しようとしています

私の xpath 式は//DefaultValueであるため、名前 DefaultValue のすべての要素が選択されることを期待しています

私のテストファイル(カットダウン)は次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<SharedDataSet xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2010/01/shareddatasetdefinition">
  <Description />
  <DataSet Name="ddd">
    <Query>
      <DataSourceReference>xxx</DataSourceReference>
      <DataSetParameters>
        <DataSetParameter Name="p1">
          <DefaultValue>baaaah</DefaultValue> <!-- this node should be selected eh? -->
        </DataSetParameter>
        <DataSetParameter Name="p2">
          <DefaultValue>fooo</DefaultValue>   <!-- this node should be selected too eh? -->
        </DataSetParameter>
      </DataSetParameters>
   </Query>
 </SharedDataSet>

コードは次のとおりです。

XmlNamespaceManager xn = new XmlNamespaceManager(new NameTable());
xn.AddNamespace("ns", "http://schemas.microsoft.com/sqlserver/reporting/2010/01/shareddatasetdefinition");
xn.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner");
xn.AddNamespace("cl", "http://schemas.microsoft.com/sqlserver/reporting/2010/01/componentdefinition");

XDocument document = XDocument.Parse(reportBuffer, LoadOptions.PreserveWhitespace);
IEnumerable<XElement> elements = document.XPathSelectElements(xpath, xn);

この時点で、elements.Count() equals 0

私が提示する愚かさを誰かが見ることができますか?

xml の悪魔を幸せにすることはできないようです... :-(

4

1 に答える 1

3

要素は実際には<DefaultValue>名前空間にバインドされていますhttp://schemas.microsoft.com/sqlserver/reporting/2010/01/shareddatasetdefinition

ドキュメント要素は<SharedDataSet>接頭辞なしで宣言されているため、見落としがちです。<DefaultValue>は子孫であるため、名前空間を継承します。

要素を選択する場合は<DefaultValue>、XPath を調整する必要があります。

//ns:DefaultValue
于 2012-08-31T02:10:26.110 に答える