我有一些XML需要搜索字段符合特定条件的部分。我试图使用XPath但不知道如何寻找两个“字段”部分。以下是找到两个项目的XPath:
/importJob/links/link/field[@name='ModuleId' and @value='ab6f15c7-bb68-4243-8815-02818c6dbbee']"
但如果我试试这个,它就找不到任何物品:
/importJob/links/link/field[@name='ModuleId' and @value='ab6f15c7-bb68-4243-8815-02818c6dbbee' and @name='SystemId' and @value='850fd5eb-0985-4169-bce9-c62ad0335c5f']"
以下是源XML:
<importJob>
<links>
<link linkId="00cb3dca-ffd6-4a90-b690-01e99913708d" LastModifiedDate_UTC="2012-10-24T23:28:00">
<field name="ModuleId" value="ab6f15c7-bb68-4243-8815-02818c6dbbee" />
<field name="SystemId" value="850fd5eb-0985-4169-bce9-c62ad0335c5f" />
</link>
<link linkId="00cb3dca-ffd6-4a90-b690-01e99913708d" LastModifiedDate_UTC="2012-10-24T23:28:00">
<field name="ModuleId" value="ab6f15c7-bb68-4243-8815-02818c6dbbee" />
<field name="SystemId" value="3c922537-0457-4fc5-a282-ee5a5f7084f2" />
</link>
<link linkId="00cb3dca-ffd6-4a90-b690-01e99913708d" LastModifiedDate_UTC="2012-10-24T23:28:00">
<field name="ModuleId" value="b77d692a-1f89-4abb-8af2-0c955364107a" />
<field name="SystemId" value="850fd5eb-0985-4169-bce9-c62ad0335c5f" />
</link>
<link linkId="00cb3dca-ffd6-4a90-b690-01e99913708d" LastModifiedDate_UTC="2012-10-24T23:28:00">
<field name="ModuleId" value="b77d692a-1f89-4abb-8af2-0c955364107a" />
<field name="SystemId" value="3c922537-0457-4fc5-a282-ee5a5f7084f2" />
</link>
</links>
</importJob>
有人可以通过告诉我XPath是否可以做什么来帮助,如果是,那么正确的XPath命令是什么。在实时代码中,这将动态创建,并且可能存在一个或多个“字段”元素。我可以对此进行编程,但首先需要XPath命令。
编辑1 -------------------------
我的问题可能更清楚,所以我在这里添加更多细节。
我需要返回一个或多个“链接”部分,其中所有“name”和“value”属性都与XPath命令匹配。所以根据我的示例xml,我需要创建一个XPath命令,它将返回第一个“链接”部分。 ModuleId在前两个“链接”部分中是相同的,因此命令必须使用多个“字段”部分,以便它只返回第一个“链接”部分。在我尝试创建XPath命令(上面的第二个)时,您可以看到它有两个“名称”和两个“值”部分。我希望这会找到第一个“链接”部分。
编辑2 -------------------------
我现在正在使用此XPath命令,它似乎工作。我需要使用一些括号并移动“字段”部分,以便它返回链接部分。
/importJob/links/link[(field/@name='SystemId' and field/@value='850fd5eb-0985-4169-bce9-c62ad0335c5f') and (field/@name='ModuleId' and field/@value='ab6f15c7-bb68-4243-8815-02818c6dbbee')]
答案 0 :(得分:4)
如果要同时选择模块和系统字段,请使用OR
"/importJob/links/link/field[(@name='ModuleId' and @value='ab6f15c7-bb68-4243-8815-02818c6dbbee') or (@name='SystemId' and @value='850fd5eb-0985-4169-bce9-c62ad0335c5f')]";
这给出了:
<field name="ModuleId" value="ab6f15c7-bb68-4243-8815-02818c6dbbee" />
<field name="SystemId" value="850fd5eb-0985-4169-bce9-c62ad0335c5f" />
<field name="ModuleId" value="ab6f15c7-bb68-4243-8815-02818c6dbbee" />
<field name="SystemId" value="850fd5eb-0985-4169-bce9-c62ad0335c5f" />
否则,您正在尝试同时查找模块AND系统的字段。因此,您没有这样的字段,也没有返回任何内容。
编辑:您可以使用以下带有嵌套谓词的xpath来获取link
元素,这两个元素都包含您将提供的条件的字段
var xpath = "//link[field[@name='ModuleId' and @value='ab6f15c7-bb68-4243-8815-02818c6dbbee'] and field[@name='SystemId' and @value='850fd5eb-0985-4169-bce9-c62ad0335c5f']]";