Xml 如何将通配符或字符串模式与XSLTv1.0匹配

Xml 如何将通配符或字符串模式与XSLTv1.0匹配,xml,xslt,xpath,xslt-1.0,Xml,Xslt,Xpath,Xslt 1.0,我的XML数据包含以下内容: <Cookies> </Cookie> <Cookie name="PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953888d"> <Value>%2Fportal</Value> <Path>/</Path><Domain></Domain><Expires></

我的XML数据包含以下内容:

    <Cookies>
    </Cookie>
    <Cookie name="PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953888d">
    <Value>%2Fportal</Value>
    <Path>/</Path><Domain></Domain><Expires></Expires><Secure>0</Secure> 
    <HTTPOnly>0</HTTPOnly>
    </Cookie>
    <Cookie name="PD_STATEFUL_2808f5b6-48e3-11e8-bb87-000c2953180d">
    <Value>%2Fwasapp</Value>
    <Path>/</Path><Domain></Domain><Expires></Expires><Secure>0</Secure> 
    <HTTPOnly>0</HTTPOnly>
    </Cookie>
    </Cookies>

%2F门户
/0 
0
%2Fwasapp
/0 
0
使用XLSTv1.0,如何修改以下代码以设置所有以PD_STATEFUL_*开头的cookie的属性,而不是编码每个特定的cookie名称

    <xsl:template match="//HTTPResponse/Cookies">
        <xsl:if test="Cookie/@name='PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953180d'">
            <Cookie action="update" name="PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953180d">
                <Secure>1</Secure>
                <HTTPOnly>1</HTTPOnly>
            </Cookie>
        </xsl:if>
        <xsl:if test="Cookie/@name='PD_STATEFUL_2808f5b6-48e3-11e8-bb87-000c2953180d'">
            <Cookie action="update" name="PD_STATEFUL_2808f5b6-48e3-11e8-bb87-000c2953180d">
                <Secure>1</Secure>
                <HTTPOnly>1</HTTPOnly>
            </Cookie>
        </xsl:if>
    </xsl:template>

1.
1.
1.
1.

由于我不确定您的预期输出,我提供了两个样式表:

1) 保持
Cookie
节点的相同结构,只需将元素
Secure
HTTPOnly
的值更改为
1
,并添加
action=“update”
属性

2) 在添加
action=“update”
属性并将
Secure
HTTPOnly的值更改为
1
之后,删除
Cookie
节点的所有其他子节点

输入:

::::::::::::::
cookies.xml
::::::::::::::
<?xml version="1.0" encoding="utf-8"?>
<Cookies>
  <Cookie name="PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953888d">
    <Value>%2Fportal</Value>
    <Path>/</Path>
    <Domain/>
    <Expires/>
    <Secure>0</Secure>
    <HTTPOnly>0</HTTPOnly>
  </Cookie>
  <Cookie name="PD_STATEFUL_2808f5b6-48e3-11e8-bb87-000c2953180d">
    <Value>%2Fwasapp</Value>
    <Path>/</Path>
    <Domain/>
    <Expires/>
    <Secure>0</Secure>
    <HTTPOnly>0</HTTPOnly>
  </Cookie>
</Cookies>
案例2:

::::::::::::::
cookies.xml
::::::::::::::
<?xml version="1.0" encoding="utf-8"?>
<Cookies>
  <Cookie name="PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953888d">
    <Value>%2Fportal</Value>
    <Path>/</Path>
    <Domain/>
    <Expires/>
    <Secure>0</Secure>
    <HTTPOnly>0</HTTPOnly>
  </Cookie>
  <Cookie name="PD_STATEFUL_2808f5b6-48e3-11e8-bb87-000c2953180d">
    <Value>%2Fwasapp</Value>
    <Path>/</Path>
    <Domain/>
    <Expires/>
    <Secure>0</Secure>
    <HTTPOnly>0</HTTPOnly>
  </Cookie>
</Cookies>
样式表:

::::::::::::::
cookies.xsl
::::::::::::::
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
    <xsl:template match="Cookie[starts-with(@name,'PD_STATEFUL_')]">
        <Cookie action="update" name="{./@name}">
                <xsl:apply-templates select="@*|node()"/>
        </Cookie>
    </xsl:template>
    <xsl:template match="Cookie[starts-with(@name,'PD_STATEFUL_')]/Secure/text()">1</xsl:template>
    <xsl:template match="Cookie[starts-with(@name,'PD_STATEFUL_')]/HTTPOnly/text()">1</xsl:template>
</xsl:stylesheet>
::::::::::::::
cookies2.xsl
::::::::::::::
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
    <xsl:template match="Cookie[starts-with(@name,'PD_STATEFUL_')]">
        <Cookie action="update" name="{./@name}">
                <Secure>1</Secure>
                <HTTPOnly>1</HTTPOnly>
        </Cookie>
    </xsl:template>
</xsl:stylesheet>
因此,其他子节点将丢失

输出:

$xsltproc cookies.xsl cookies.xml | xmllint --format -                                                                         
<?xml version="1.0"?>
<Cookies>
  <Cookie action="update" name="PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953888d">
    <Value>%2Fportal</Value>
    <Path>/</Path>
    <Domain/>
    <Expires/>
    <Secure>1</Secure>
    <HTTPOnly>1</HTTPOnly>
  </Cookie>
  <Cookie action="update" name="PD_STATEFUL_2808f5b6-48e3-11e8-bb87-000c2953180d">
    <Value>%2Fwasapp</Value>
    <Path>/</Path>
    <Domain/>
    <Expires/>
    <Secure>1</Secure>
    <HTTPOnly>1</HTTPOnly>
  </Cookie>
</Cookies>
$ xsltproc cookies2.xsl cookies.xml | xmllint --format -
<?xml version="1.0"?>
<Cookies>
  <Cookie action="update" name="PD_STATEFUL_2707f5b6-48e3-11e8-bb87-000c2953888d">
    <Secure>1</Secure>
    <HTTPOnly>1</HTTPOnly>
  </Cookie>
  <Cookie action="update" name="PD_STATEFUL_2808f5b6-48e3-11e8-bb87-000c2953180d">
    <Secure>1</Secure>
    <HTTPOnly>1</HTTPOnly>
  </Cookie>
</Cookies>
$xsltproc cookies2.xsl cookies.xml | xmllint--格式-
1.
1.
1.
1.

您的预期输出是什么?