Поскольку я не был уверен в ожидаемом результате, я предоставил 2 таблицы стилей:
1) Сохраните ту же структуру узла Cookie
и просто измените значения элементов Secure
и HTTPOnly
на 1
и добавьте атрибут action="update"
2) Удалите все остальные подузлы узла Cookie
поверх добавления атрибута action="update"
и изменения значения Secure
и HTTPOnly
на 1
ВХОД:
::::::::::::::
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>
СЛУЧАЙ 1
STYLESHEET:
::::::::::::::
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>
ОБЪЯСНЕНИЯ:
Скопируйте каждый узел / атрибут, затем при достижении узлов, соответствующих условию Cookie[starts-with(@name,'PD_STATEFUL_')]
, добавьте атрибут action="update"
, используйте тот же атрибут name="{./@name}"
, а затем скопируйте все под этим элементом при достижении Cookie[starts-with(@name,'PD_STATEFUL_')]/Secure/text()
и Cookie[starts-with(@name,'PD_STATEFUL_')]/HTTPOnly/text()
шаблон будет запущен, и его значение будет установлено равным 1. Это изменение не повлияет на другие файлы cookie, не относящиеся к starts-with(@name,'PD_STATEFUL_')
.
ВЫВОД:
$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>
Вариант 2:
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>
ПОЯСНЕНИЯ:
Здесь при достижении узлов, которые уважают Cookie[starts-with(@name,'PD_STATEFUL_')
перезаписываем содержимое узла на
<Cookie action="update" name="{./@name}">
<Secure>1</Secure>
<HTTPOnly>1</HTTPOnly>
</Cookie>
Поэтому другие подузлы будут потеряны.
ВЫВОД:
$ 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>