С XSLT 1.0 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vQ">"</xsl:variable>
<xsl:template match="/">
<xsl:value-of select=
'substring-before(substring-after(//meta[@name="parsely-page"]/@content,
concat($vQ, "pub_date", $vQ, ":", $vQ)), $vQ)'/>
</xsl:template>
</xsl:stylesheet>
Когда выполняется преобразование этого XML-документа (ваш метатег):
<meta name="parsely-page"
content='{"title":"Article title","link":"https:\/\/site.com\/category\/article","type":"post","section":"category","image_url":"","author":null,"pub_date":"2009-03-01T14:17:14+00:00","post_id":"article_6463676334","tags":[]}' />
желаемый результат получен :
2009-03-01T14: 17: 14 + 00: 00
Мы можем написать одно выражение XPath 1.0, которое вычисляется в требуемую строку , однако нам придется избегать кавычек и апострофов, чтобы избежать ошибок при их вложении, если они не экранированы:
substring-before(substring-after(//meta[@name="parsely-page"]/@content,
'"pub_date":"'),
'"')
Проверка с использованием XSLT 1.0 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vQ">"</xsl:variable>
<xsl:template match="/">
<xsl:value-of select=
'substring-before(substring-after(//meta[@name="parsely-page"]/@content,
'"pub_date":"'),
'"')'/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к тому же XML-документу (выше), оно оценивает одно выражение XPath 1.0 и выводит требуемый, правильный результат:
2009-03-01T14: 17: 14 + 00: 00