我是xpath匹配的新手。这里我有一个传递XML包含为字符串的方法。我将其转换为XmlDocument。
public static void getProjectDataInfo(string content) {
XmlDocument doc = new XmlDocument();
doc.LoadXml(content);
}
这是我的XML。它有xmlns:my
<?xml version="1.0" encoding="UTF-8"?>
<my:myFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-02-03T16:54:46" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-us">
<my:Financial>
<my:Quote>
<my:CHARGE_TYPE>MRC</my:CHARGE_TYPE>
<my:Price>463.92</my:Price>
</my:Quote>
</my:Financial>
</my:myField>
我只想获得
的值/my:myFields/my:Financial/my:Quote/my:Price
但是我无法获取值,因此这个XML有xmlns。
请帮帮我。
答案 0 :(得分:5)
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("ns", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-02-03T16:54:46");
var str = doc.XPathSelectElement("/root/ns:myFields/ns:Financial/ns:Quote/ns:Price", nsmgr)
.ToString(SaveOptions.DisableFormatting);
Console.WriteLine(str);
答案 1 :(得分:0)
使用LINQ2XML
XElement doc=XElement.Parse(content);
XNamespace my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-02-03T16:54:46";
var price=doc.Element(my+"myFields").Element(my+"Financial").Element(my+"Quote").Element(my+"Price").Value;
OR [如果你想坚持 OLD 的事情]
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.OwnerDocument.NameTable);
nsmgr.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-02-03T16:54:46");
var priceNode = el.SelectNode(@"/my:myFields/my:Financial/my:Quote/my:Price", nsmgr);
答案 2 :(得分:0)
您需要告诉XmlDocument my
前缀绑定到哪个。您使用XmlNamespaceManager来执行此操作。这是一个示例http://support.microsoft.com/kb/316913。在你的情况下,你会这样做:
xmlns.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-02-03T16:54:46")
答案 3 :(得分:0)
对于2013年的Infopath表格,可能如下:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); nsmgr.AddNamespace(“my”,“http://schemas.microsoft.com/office/infopath/2003/myXSD/2014-11-10T18:44:26”);
XmlNode root = doc.DocumentElement;
XmlNode yourIDNode = root.SelectSingleNode(“/ my:myFields / my:YourID”,nsmgr);
详细信息“my”命名空间定义,您可以从Share Point文档库下载,其中您的infopath表单提交了xml数据。下载其中一个保存的infopath表单xml数据文件,并用记事本打开它,然后你会在内容的顶部找到它。