Xml 如何将通配符或字符串模式与XSLTv1.0匹配
我的XML数据包含以下内容: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></
<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.
您的预期输出是什么?