1

XML(フラグメント):

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetXMLResponse xmlns="http://sitecore.net/visual/">
<GetXMLResult>
<sitecore xmlns="">
<status>ok</status>

コード(フラグメント):

XmlNamespaceManager nsManager = new XmlNamespaceManager(template.NameTable);
nsManager.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
nsManager.PushScope();

XmlNode sitecoreRoot = template.SelectSingleNode("/soap:Envelope/soap:Body/*[namespace-uri()='http://sitecore.net/visual/' and local-name()='GetXMLResponse']", nsManager);

string status = sitecoreRoot.SelectSingleNode("/GetXMLResult/sitecore/status").Value;

sitecoreRoot要素は正しいノードを返します。ただし、siteCoreRoot.OuterXMlプロパティに要素が存在することが示されている場合でも、ステータスを取得するXPathは常にnullを返します。

私が考えることができる唯一のことは、次の行です。

<sitecore xmlns="">

XPathを破棄しています

TIA

4

2 に答える 2

0
XmlNamespaceManager ns = new XmlNamespaceManager(cd.NameTable);
        ns.AddNamespace("sp", "http://schemas.xmlsoap.org/soap/envelope/");
        ns.AddNamespace("sc", "http://sitecore.net/visual/");
        XmlNode sitecoreRoot = cd.SelectSingleNode("//sp:Envelope/sp:Body/sc:GetXMLResponse/sc:GetXMLResult/sitecore/status", ns);
var status = sitecoreRoot.InnerText;

あなたを助けることができますか?

于 2012-12-10T19:25:21.903 に答える
0

ステータスノードだけが必要な場合は、このxmlライブラリと次のXPathを試すことができます。

XElement root = XElement.Load(file); // or .Parse(string)
XElement status = root.XPathElement("//status");

ライブラリは、名前空間の実行を処理します。

于 2012-12-10T19:46:42.293 に答える