- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下 XPath 字符串
"(//DEAL_SETS/DEAL_SET/DEALS/DEAL/PARTIES/PARTY[ROLES/ROLE/
ROLE_DETAIL/PartyRoleType='Borrower'])
[(ROLES/PARTY_ROLE_IDENTIFIERS/PARTY_ROLE_IDENTIFIER/
PartyRoleIdentifier='1' or position() = 1)]/ROLES/ROLE/BORROWER/
RESIDENCES/RESIDENCE/ADDRESS/PostalCode[../../RESIDENCE_DETAIL/
BorrowerResidencyType='Current']"
当我将它放入 Altova XML Spy 并给出结果时,它会起作用。
但是当我直接使用它时,它是 Xelement.XPathSelectElement(XPath)
,它不起作用,但有效的是 Xelement.XPathSelectElement(collective, nameSpaceManager)
其中 collective 是命名空间前缀(比如命名为“ns”)加上我的 XPath 字符串。
但问题是我必须将 XPath 字符串更改为类似这样的内容
"(//ns:DEAL_SETS/ns:DEAL_SET/ns:DEALS/ns:DEAL/ns:PARTIES/ns:PARTY[ns:ROLES/
ns:ROLE/ns:ROLE_DETAIL/ns:PartyRoleType='Borrower'])[(ns:ROLES/
ns:PARTY_ROLE_IDENTIFIERS/ns:PARTY_ROLE_IDENTIFIER/
ns:PartyRoleIdentifier='1' or position() = 1)]/ns:ROLES/
ns:ROLE/ns:BORROWER/ns:RESIDENCES/ns:RESIDENCE/
ns:ADDRESS/ns:PostalCode[../../ns:RESIDENCE_DETAIL/
ns:BorrowerResidencyType='Current']"
有什么方法可以避免在每个节点上放置命名空间前缀 (ns:
)。
抱歉没有早点发布示例 xml,您可以复制 Party 标签及其元素并填充虚假数据,PartyRoleType 告诉我它是哪一方,可能是借款人、评估人等 partyroleidentifier 给我一种区分两者的方法具有相同 partyroletypes 的一方,例如可能有 2 个借款人,partyroleidentifier 将他们区分为 1 和 2
<?xml version="1.0" encoding="utf-8"?>
<MESSAGE xmlns="http://www.example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xxxxReferenceModelIdentifier="3.0.0.263.12" xsi:schemaLocation="http://www.example.org/schemas C:\Subversion\xxx_3_0.xsd">
<DEAL_SETS>
<DEAL_SET>
<DEALS>
<DEAL>
<PARTIES>
<PARTY>
<ROLES>
<ROLE>
<PARTY_ROLE_IDENTIFIERS>
<PARTY_ROLE_IDENTIFIER>
<PartyRoleIdentifier>1</PartyRoleIdentifier>
</PARTY_ROLE_IDENTIFIER>
</PARTY_ROLE_IDENTIIERS>
<BORROWER>
<RESIDENCES>
<RESIDENCE>
<ADDRESS>
<PostalCode>56236</PostalCode>
</ADDRESS>
</RESIDENCE>
</RESIDENCES>
</BORROWER>
<ROLE_DETAIL>
<PartyRoleType>Borrower</PartyRoleType>
</ROLE_DETAIL>
</ROLE>
</ROLES>
</PARTY>
</PARTIES>
</DEAL>
</DEALS>
</DEAL_SET>
</DEAL_SETS>
</MESSAGE>
最佳答案
根据 MSDN 文档,当您调用
AddNamespace 时对于命名空间管理器,您可以使用
String.Empty
作为命名空间 URI 的前缀。这应该使您能够在没有所有那些
ns:
前缀的情况下执行 XPath 表达式。
更新:
好的,我记得以前遇到过这个问题。 XPath 表达式中空 namespace 前缀的行为与 .NET XML 套件的其余部分不一致。有一些证据表明一些 Microsoft 人员已经意识到了这个问题。参见 this forum thread .我会寻找更多的解决方案,但我认为您将不得不使用命名空间前缀。
更新 2:
欢迎对此 Microsoft Connect Bug 进行投票我刚刚创建的。我看到他们过去曾关闭过类似的错误,但他们之前都没有关注可用性问题。也许我们会获得更多选票。
更新 3:
只是一些澄清,我提交的错误不是也从来不是关于符合 XPath 标准,而是关于可用性。无论标准如何,用户都需要一种方法来使带有命名空间的 XML 的 XPath 查询更加简洁,但目前不支持这种方法。就标准支持而言,XSLT 2.0 可以通过与 namespace URI 关联的空 namespace 前缀来执行 XPath 2.0,而 XMLSpy 也具有该功能。 The MSDN documentation claims that .NET has XPath 2.0 support ,但该说法的真实性存在争议。有人可能会争辩说,.NET 通过不允许修改空前缀所代表的内容来正确地实现 XPath 1.0。
关于c# - Xelement.XPathSelectElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8509230/
我们在我支持的应用程序中得到了意想不到的结果,因为代码在匹配多个项目的路径上调用 XPathSelectElement()。举例说明: XElement e = XElement.Parse(@"
我正在使用 XPathSelectElement 将数据存储到 XML 文件中。我如何在下面的代码片段中使用全局变量名称而不是 ID 名称“City1”? 我想要的代码是: string myVari
我有以下 XPath 字符串 "(//DEAL_SETS/DEAL_SET/DEALS/DEAL/PARTIES/PARTY[ROLES/ROLE/ ROLE_DETAIL/PartyRole
您好,不确定这是否可以完成,但我知道这里有人会知道:) 使用 XElement oNodeEquip = xmlDoc.XPathSelectElement("//ItemAry/Item/Equip
如何在可移植类库中使用 XPathSelectElement?当我尝试在项目中包含 System.Xml.XPath 程序集时,出现以下错误: The type 'System.Xml.Linq.XE
我想知道使用简单查询时是否存在任何性能差异: var x = document.XPathSelectElement("actors/actor") vs var x = document.Desce
我有如下的Xelement。 XXXXX http://open.fda.gov/license 2015-05-31 Oxygen
我正在从 xml 文档中提取一个元素,但它返回了 null OK 1439379003 我正在尝试提取 test2 元素,但它返回 null var responseXdoc = XDo
我在读取一些 xml 行时遇到了 XPathSelectElement 的问题.... 函数 handleEachSession 从我的其他函数的 mathod childList.ForEach()
为什么这个 Xpath 在使用 XDocument.XPathSelectElement 时不起作用? Xpath: //Plugin/UI[1]/PluginPageCategory[1]/Page
我有以下 xml 我已经尝试了所有可能的 XPath 查询组合来读取 db2 (="Name2") 的名称,但从未获得预期的结果。 到目前
我正在尝试使用 System.Xml.XPath 命名空间的 XPathSelectElement 方法,但由于某种原因它总是返回 null,我不知道为什么。 代码如下: TextReader str
为什么这个 Xpath 在使用 XDocument.XPathSelectElement 时不起作用? Xpath: //Plugin/UI[1]/PluginPageCategory[1]/Page
我有一个 XML 例如
我正在使用 XElement 创建内存中的 Xml 树。这是我的 xml 示例: createCurve
我有一个文件,基本上是一个 XPath 列表,如下所示: /Options/File[1]/Settings[1]/Type[1] /Options/File[1]/Settings[1]/Path[
怎么做node.XPathSelectElement()和 node.XPathSelectElements() behave when the selection is either not a N
我正在尝试弄清楚为什么我的 xpath 不会选择我指定的节点 我的 xpath 表达式是 //DefaultValue,所以我希望所有名为 DefaultValue 的元素都被选中 我的测试文件(缩减
在.Net 4.X中,这个扩展方法在System.Xml.XPath下。 但是我想知道如何在 .Net Core 中找到/使用它?我有一个类库。 移植工具不显示有关 XPathSelectElemen
我需要读取一个具有属性 xmlns="http://www.w3.org/2000/09/xmldsig#"的 xml 元素。XPathSelectElement 给出错误“对象引用未设置到对象的实例
我是一名优秀的程序员,十分优秀!