如何从具有''与其他字符一起作为字符串获取
本文关键字:一起 字符串 获取 字符 其他 | 更新日期: 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;