首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wix -如何使用XmlConfig和Xpath删除父节点集

Wix -如何使用XmlConfig和Xpath删除父节点集
EN

Stack Overflow用户
提问于 2015-03-06 04:47:00
回答 1查看 213关注 0票数 0

如何在XmlConfig中找到text()节点并使用它删除父节点集。我看到的所有示例都只是查找和删除“find”节点,而不是父节点。

我的理解是,此Xpath通过验证路径查找匹配的节点,ElementPath是要删除的节点的路径。然而,它根本不起作用。

是否支持text()?,我已经尝试了[[*='ATrigger'[]],[[].='ATrigger'[]],但仍然没有成功。

代码语言:javascript
复制
        <util:XmlConfig Id="RemoveATriggerCompletely" File="[#QuartzXmlJob]" Sequence="104" Action="delete" On ="install" Node="element"
            ElementPath="//job-scheduling-data/schedule/" 
            VerifyPath="//job-scheduling-data/schedule/trigger/cron/name[\[]text()='ATrigger'[\]]"/>

给定以下XML

代码语言:javascript
复制
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
<schedule>
    <trigger>
        <cron>
            <name>ATrigger</name>
            <group>default</group>
            <description>Every 2 minutes</description>
            <job-name>ATriggerJob</job-name>
            <job-group>defaultGroup</job-group>
            <misfire-instruction>SmartPolicy</misfire-instruction>
            <!-- every 5mins -->
            <cron-expression>2 * * * * ?</cron-expression> 
        </cron>
    </trigger>

    <trigger>
        <cron>
            <name>BTrigger</name>
            <group>default</group>
            <description>Every 2 minutes</description>
            <job-name>BTriggerJob</job-name>
            <job-group>defaultGroup</job-group>
            <misfire-instruction>SmartPolicy</misfire-instruction>
            <!-- every 5mins -->
            <cron-expression>2 * * * * ?</cron-expression> 
        </cron>
    </trigger>

我需要的输出是

代码语言:javascript
复制
<job-scheduling-data xmlns="http://quartznet.sourceforge.net/JobSchedulingData" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
<schedule>
    <trigger>
        <cron>
            <name>BTrigger</name>
            <group>default</group>
            <description>Every 2 minutes</description>
            <job-name>BTriggerJob</job-name>
            <job-group>defaultGroup</job-group>
            <misfire-instruction>SmartPolicy</misfire-instruction>
            <!-- every 5mins -->
            <cron-expression>2 * * * * ?</cron-expression> 
        </cron>
    </trigger>

我已经把头撞在墙上好几个小时了,所以任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2015-03-07 03:39:35

我不熟悉"XmlConfig“任务。

但我看到了两个问题。

您需要为名称空间添加别名,并将该别名用于xpath "select“。

我在下面展示了XmlPeek版本。注意,我使用的是“花生”,你可以使用任何你想要的别名。

注意,查询的所有元素名称中现在都有“花生:”。

代码语言:javascript
复制
<!-- you do not need a namespace for this example, but I left it in for future reference -->
<XmlPeek Namespaces="&lt;Namespace Prefix='peanut' Uri='http://quartznet.sourceforge.net/JobSchedulingData'/&gt;"
     XmlInputPath=".\Parameters.xml" 
     Query="//peanut:job-scheduling-data/peanut:schedule/peanut:trigger/peanut:cron/peanut:name[text()='ATrigger']/../..">
    <Output TaskParameter="Result" ItemName="Peeked" />
</XmlPeek>

注意我的"../..“

一旦找到了正确的元素,找到它的父元素就像"..“符号。

您需要弄清楚如何将名称空间和别名添加到任务中(XmlConfig)

追加:

http://sourceforge.net/p/wix/bugs/2384/

具有名称空间的Hmmm...dealing不是微不足道的。我认为您遇到的问题与那里报告的问题类似。

追加:

“内联”命名空间...(讨厌)

代码语言:javascript
复制
<XmlPeek
     XmlInputPath=".\Parameters.xml" 
     Query="//*[local-name()='job-scheduling-data' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData']/*[local-name()='schedule' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData']/*[local-name()='trigger' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData']/*[local-name()='cron' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData']/*[local-name()='name' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData'][text()='ATrigger']/../..">
    <Output TaskParameter="Result" ItemName="Peeked" />
</XmlPeek>

也可以试试下面的Xpath:

代码语言:javascript
复制
"//*[local-name()='job-scheduling-data' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData']/*[local-name()='schedule' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData']/*[local-name()='trigger' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData']/*[local-name()='cron' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData']/*[local-name()='name' and namespace-uri()='http://quartznet.sourceforge.net/JobSchedulingData'][text()='ATrigger']/../.."
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28887389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档