我剛剛一直有這個問題,而使用的Xalan-C
我最初不太明白的一點是,XPath或XSLT命名空間別名/前綴可能與文檔不同 - 取決於您的命名空間解析器。
看起來,如果文檔上有一個命名空間,那麼它將無法匹配路徑元素,除非使用了命名空間。 (標準但並不總是遵循?)
的XalanDocumentPrefixResolver將XPath或XSLT命名空間映射到URI和嘗試,並通過獲取前綴給它們編號 - 這裏沒有前綴它使用它變成的xmlns
/xmlns:List/xmlns:Fields/xmlns:Field
或者你的名字可以創建自己的解析器,但它仍然需要在XPath :(
這裏使用的最小的命名空間是一個我砍死在一起,同時測試,無記憶保證
// don't care what prefix given, there can only be the one
struct NoPrefixResolver : public xalanc::PrefixResolver {
NoPrefixResolver(const xalanc::XalanDOMString& theURI) : m_uri(theURI){}
virtual const xalanc::XalanDOMString*
getNamespaceForPrefix(const xalanc::XalanDOMString& prefix) const {
return &m_uri;
}
virtual const xalanc::XalanDOMString& getURI() const {
return m_uri;
}
const xalanc::XalanDOMString m_uri;
};
/x:List/x:Fields/x:Field
/a:List/b:Fields/c:Field
許多重複之一:http://stackoverflow.com/questions/11345/xpaths-and-default-namespaces – 2011-03-09 19:45:28
沒有,這不是重複。這個問題特別指出了C#,而這是嚴格的xpath/xml。而且,他的命名空間不是空白的,而我的是。 – 2011-03-21 14:37:51
您需要某種程度的抽象......您在問如何使用XPath表達式在默認名稱空間下選擇元素。 **這是最常見的**。 – 2011-03-21 16:09:36