2009-04-24 56 views
1

我與在BizTalk的XPath功能
掙扎 - 我得到的消息有一個空的默認命名空間
- 在C#中我會添加一個NameSpaceManager
- 但我看不到我如何在BizTalk表達式中執行此操作?的BizTalk XPath的一個默認的命名空間和無前綴

所有我沒有做的就是讓HasErrors的價值觀和NumberOfErrors

<?xml version="1.0" encoding="utf-8"?> 
<ImportIndexDocumentResponse 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://www.aniteps.com/xml/schemas/awm/images4"> 
    <HasErrors>false</HasErrors> 
    <NumberOfErrors xsi:type="xsd:int">0</NumberOfErrors> 
    <ErrorDescription xsi:type="xsd:string">No exception ocurred.</ErrorDescription> 
    ... 
+0

問題的標題是誤導性的。默認的命名空間是* not * blank。它是「http://www.aniteps.com/xml/schemas/awm/images4」。你的意思是「沒有命名空間前綴」。 – 2009-04-25 14:51:18

+0

感謝指針Dimitre – SteveC 2009-05-05 10:19:16

回答

1

使用local-name()的答案是錯誤的,因爲它允許選擇不需要的元素,如:

  • OhMy:HasErrors
  • 不同:HasErrors
  • 無用:HasErrors

這是一個正確的解決辦法:

如果它是不可能的前綴綁定到默認名稱空間http://www.aniteps.com/xml/schemas/awm/images4一個可以使用標準的XPath函數namespace-uri()指定該元素必須駐留在給定的名稱空間中。

Thereforere,即選擇需要的兩種節點的XPath表達式的一個例子是

 
/*/*[namespace-uri() = 'http://www.aniteps.com/xml/schemas/awm/images4' 
    and 
    name() = 'HasErrors' 
    ] 

和表達:

 
/*/*[namespace-uri() = 'http://www.aniteps.com/xml/schemas/awm/images4' 
    and 
    name() = 'NumberOfErrors' 
    ] 
0

如果你的元素不會重複,你可以促進他們從響應架構中作爲區分字段。那麼你不必擔心編碼。只需使用:

x = YourMessageName.HasErrors; 

如果它是一個Web/WCF的參考,您可以促進(與「使用WCF服務嚮導」或xyz.xsd)從reference.xsd值。請注意,如果更新參考文獻,它們將「消失」。