如何从具有' \'的xml节点获取innertext以字符串形式提取时与其他字符一起使用

时间:2014-03-22 15:35:20

标签: c# xml oracle

我正面临一个问题,即从我的oracle数据库中保存为varchar2的xml脚本中提取innertext。 在获取时,我使用以下格式获取xml:

    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SpecificAction xmlns=\"http://www.xyz.com/schemas/core/caut\">action to take</SpecificAction>"

使用以下代码获取以下xml:

    instance.cautDescription = records.GetStringOrDefault("SPEC_ACTION");

字段SPEC_ACTION是VARCHAR2(4000 BYTE)类型。

由于数据库中xml中存在\字符,我无法使用Tag提取内部文本。我尝试使用以下代码来获取内部文本:

    string s = instance.cautDescription;
    XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(s);

            XmlNode specificAction = xmlDoc.DocumentElement.SelectSingleNode("/SpecificAction");
            string specific = specificAction.InnerText;
            xmlString = specificAction.InnerText;

            return xmlString;

我的代码返回null可以避免这种情况如何,任何支持都会非常有用。

2 个答案:

答案 0 :(得分:0)

自&#34;具体行动&#34; node有一个命名空间,你需要提供命名空间管理器。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(s);

XmlNamespaceManager ns = new XmlNamespaceManager(xmlDoc.NameTable);
ns.AddNamespace("xyz", "http://www.xyz.com/schemas/core/caut");
XmlNode specificAction = xmlDoc.SelectSingleNode("/xyz:SpecificAction", ns);

return specificAction.InnerText;

答案 1 :(得分:0)

使用具有默认命名空间的XML时,这是一个经典问题。在XML中,当您具有默认命名空间(没有前缀的命名空间,如xmlns="....")时,在默认命名空间中考虑所有没有前缀的元素。但是在XPath中,没有考虑前缀的所有元素都没有命名空间。要桥接这个不同的范例,您需要声明一个指向默认命名空间URI的前缀并在XPath中使用它:

var nsManager = new XmlNamespaceManager(xmlDoc.NameTable);
nsManager.AddNamespace("ns", xmlDoc.DocumentElement.NamespaceURI);
XmlNode specificAction = xmlDoc.DocumentElement.SelectSingleNode("/ns:SpecificAction", nsManager);
string specific = specificAction.InnerText;