如何从具有''与其他字符一起作为字符串获取

本文关键字:一起 字符串 获取 字符 其他 | 更新日期: 2023-09-27 17:52:36

嗨,我正面临一个问题,从保存为varchar2在我的oracle数据库的xml脚本提取内部文本。在抓取时,我正在获取以下格式的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中存在'字符,我无法提取标签内的内部文本。我尝试了以下代码来获取内部文本:

    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,这可以避免,如果是这样,任何支持将是非常有帮助的。

如何从具有''与其他字符一起作为字符串获取

这是使用具有默认名称空间的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;

由于"SpecificAction"节点有一个命名空间,因此您需要提供一个命名空间管理器。

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;