我正面临一个问题,即从我的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可以避免这种情况如何,任何支持都会非常有用。
答案 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;