簡體   English   中英

XPath:選擇具有命名空間的特定節點

[英]XPath: select specific node which has namespace

我需要在xml文檔中選擇一個節點,但是它上面的級別中的節點有一個名稱空間。 這該怎么做?

我的xml文件的一部分:

<SW.DataBlock ID="0">
<AttributeList>
  <DatablockType>SharedDB</DatablockType>
  <Interface>
    <Sections xmlns="http://www.siemens.com/automation/Openness/SW/Interface/v1">
        <Section Name="Static">
            <Member Name="DbBool1" Datatype="Bool" />
            <Member Name="DbA" Datatype="&quot;DataTypeA&quot;" />
            <Member Name="AddedDbB" Datatype="&quot;DataTypeB&quot;" />
        </Section>
    </Sections>
  </Interface>
  <MemoryLayout>Standard</MemoryLayout>
  <Name>DataA</Name>
  <Number>1</Number>
  <ProgrammingLanguage>DB</ProgrammingLanguage>
  <Type>DB</Type>
</AttributeList>
</SW.DataBlock>

這是我需要得到的“部分”節點。 由於命名空間,語句:

node2 = node.SelectSingleNode("//Section")

不起作用。 我需要用什么來代替“// Section”部分才能使它工作?

編輯:我在System.Xml包中使用vb.Net

這取決於您用於處理xpath的軟件。 使用純xpath可以做的最好的事情是

//*[local-name()='Section']

這將選擇名稱為Section的所有元素,而不管其名稱空間如何。

如果在指定的命名空間中需要此元素,則可以執行此操作

//*[local-name()='Section' and namespace-uri()='http://www.siemens.com/automation/Openness/SW/Interface/v1']

許多處理xpath的工具也有注冊命名空間的方法,然后你可以使用像這樣的限定形式

//ns:Section

我不熟悉VB或這個包,但看起來你可以使用XmlNamespaceManager類來注冊命名空間,然后將它傳遞給你用作第二個參數的方法。 這將允許您使用如圖所示的前綴版本。

文檔中的示例顯示了以下如何使用此類的示例。

 Dim reader As New XmlTextReader("myfile.xml") Dim nsmanager As New XmlNamespaceManager(reader.NameTable) nsmanager.AddNamespace("msbooks", "www.microsoft.com/books") nsmanager.PushScope() nsmanager.AddNamespace("msstore", "www.microsoft.com/store") While reader.Read() Console.WriteLine("Reader Prefix:{0}", reader.Prefix) Console.WriteLine("XmlNamespaceManager Prefix:{0}", nsmanager.LookupPrefix(nsmanager.NameTable.Get(reader.NamespaceURI))) End While 

從示例中獲取的關鍵項是創建命名空間管理器和添加命名空間。 然后你只需將它傳遞給SelectSingleNode方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM