3

我是 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。

请帮我。

4

4 回答 4

5

使用XmlNamespaceManager

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);
于 2012-11-21T05:48:18.433 回答
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;

或者[如果你想坚持那个的东西]

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);
于 2012-11-21T05:48:08.827 回答
0

您需要告诉 XmlDocumentmy前缀绑定到什么。您使用 XmlNamespaceManager 来执行此操作。这是一个示例http://support.microsoft.com/kb/316913。在你的情况下,你会这样做:

xmlns.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2012-02-03T16:54:46")

于 2012-11-21T05:48:17.453 回答
0

对于 Infopath 表格 2013,它可能如下所示:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); nsmgr.AddNamespace(“我的”,“ 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);

详细的“我的”命名空间定义,您可以从您的 infopath 表单提交的 xml 数据所在的 Share Point 文档库下载。下载其中一个保存的 infopath form xml 数据文件,然后用记事本打开它,然后您会在内容顶部找到它。

于 2014-12-01T08:53:14.290 回答