如何在 XSLT 中检测有效负载中的特定字符串
How to detect a certain string in a payload in XSLT
我想根据 XSLT(使用 Xpath 2.0)中的有效负载信息进行一些图像检测。我发现我希望检测的所有格式的图像在有效负载中都以字符“jP”或“OQ”开头。当元素包含子字符串“JP”或“OQ”作为元素中的第一个字符时,我想创建一个新元素 yes 或类似的东西,基于它我的信息流(Oracle SOA 套件 12c)将走向某个方向.下面是我的有效负载和当前 XSLT 的示例。我的问题是为什么我的 XSLT 还不能运行,如果你不处理我的主题。
我的负载看起来像这样:
<ns3:BlablablaExample>
<ns3:Attachments>
<ns3:Images>
<ns3:Image>
<ns3:AttachmentID>11223344</ns3:AttachmentID>
<ns3:MetaData>
<ns3:OriginalTimestamp>2020-11-10T10:52:07.539Z</ns3:OriginalTimestamp>
<ns3:CreationTimestamp>2020-11-10T10:52:07.539Z</ns3:CreationTimestamp>
</ns3:MetaData>
<ns3:DataSource>jPRandOmD4t4AndSTu77/9j/4AAQSkZJRgABAQAAAQABAAD/5QAJSWRlbnRpeP/bAEMABgQFBgUEBgYFBgcHBggKEAoKCQkKFA4PDBAXFBgYFxQWFhodJR8aGyMcFhYgLCAjJicpKikZHy0wLSgwJSgpKP/bAEMBBwcHCggKEwoKEygaFhooKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCullullkokKoKokokCgoKCgoKCgoKCgoKP/AABEIAoAB4AMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h4xxF0R3alOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPEigAooooAKKKKACiiigAooooAKKKKACiiigAooo))))0000oo)oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo))oo)))000oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z</ns3:DataSource>
</ns3:Image>
</ns3:Images>
</ns3:Attachments>
</ns3:BlablablaExample>
我想我的 XSLT 看起来像这样:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:ns3="http://www.randomnamespace.com/example/awesomestuff">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="text()"/>
<xsl:for-each select="ns3:BlablablaExample/ns3:Attachments/ns3:Images/ns3:Image">
<xsl:choose>
<xsl:when test="substring(/ns3:DataSource,1,2)" == "jP" || "OQ">
<JPEG2000>Yes</JPEG2000>
</xsl:when>
<xsl:otherwise>
<JPEG2000>No</JPEG2000>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
但是,正如我提到的,xslt 不起作用。
我的问题是,上面的 XSLT 有什么问题,您认为您可能会如何解决这个问题? :)
谢谢!
杰斯珀
"My question is, what is wrong with the above XSLT"
您的 XSLT 示例有太多问题,以至于很难知道从哪里开始。它在语法上是无效的 XML。它在语义上是无效的 XSLT。它包含无效的 XPath。 XPath 没有 ||
运算符,即使有,构造 if x is a or b
也意味着 "if x is a or x is b" 在几乎没有任何编程语言中存在。还有一些其他的事情,但我想这已经有点太字面意思了。
你打算写这样的东西:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:ns3="http://www.randomnamespace.com/example/awesomestuff"
>
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="ns3:Image">
<JPEG2000>
<xsl:choose>
<xsl:when test="substring(ns3:DataSource,1,2) = ('jP','OQ')">Yes</xsl:when>
<xsl:otherwise>No</xsl:otherwise>
</xsl:choose>
</JPEG2000>
</xsl:template>
</xsl:stylesheet>
我想根据 XSLT(使用 Xpath 2.0)中的有效负载信息进行一些图像检测。我发现我希望检测的所有格式的图像在有效负载中都以字符“jP”或“OQ”开头。当元素包含子字符串“JP”或“OQ”作为元素中的第一个字符时,我想创建一个新元素 yes 或类似的东西,基于它我的信息流(Oracle SOA 套件 12c)将走向某个方向.下面是我的有效负载和当前 XSLT 的示例。我的问题是为什么我的 XSLT 还不能运行,如果你不处理我的主题。
我的负载看起来像这样:
<ns3:BlablablaExample>
<ns3:Attachments>
<ns3:Images>
<ns3:Image>
<ns3:AttachmentID>11223344</ns3:AttachmentID>
<ns3:MetaData>
<ns3:OriginalTimestamp>2020-11-10T10:52:07.539Z</ns3:OriginalTimestamp>
<ns3:CreationTimestamp>2020-11-10T10:52:07.539Z</ns3:CreationTimestamp>
</ns3:MetaData>
<ns3:DataSource>jPRandOmD4t4AndSTu77/9j/4AAQSkZJRgABAQAAAQABAAD/5QAJSWRlbnRpeP/bAEMABgQFBgUEBgYFBgcHBggKEAoKCQkKFA4PDBAXFBgYFxQWFhodJR8aGyMcFhYgLCAjJicpKikZHy0wLSgwJSgpKP/bAEMBBwcHCggKEwoKEygaFhooKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCullullkokKoKokokCgoKCgoKCgoKCgoKP/AABEIAoAB4AMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h4xxF0R3alOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPEigAooooAKKKKACiiigAooooAKKKKACiiigAooo))))0000oo)oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo))oo)))000oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z</ns3:DataSource>
</ns3:Image>
</ns3:Images>
</ns3:Attachments>
</ns3:BlablablaExample>
我想我的 XSLT 看起来像这样:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:ns3="http://www.randomnamespace.com/example/awesomestuff">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="text()"/>
<xsl:for-each select="ns3:BlablablaExample/ns3:Attachments/ns3:Images/ns3:Image">
<xsl:choose>
<xsl:when test="substring(/ns3:DataSource,1,2)" == "jP" || "OQ">
<JPEG2000>Yes</JPEG2000>
</xsl:when>
<xsl:otherwise>
<JPEG2000>No</JPEG2000>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
但是,正如我提到的,xslt 不起作用。 我的问题是,上面的 XSLT 有什么问题,您认为您可能会如何解决这个问题? :)
谢谢!
杰斯珀
"My question is, what is wrong with the above XSLT"
您的 XSLT 示例有太多问题,以至于很难知道从哪里开始。它在语法上是无效的 XML。它在语义上是无效的 XSLT。它包含无效的 XPath。 XPath 没有 ||
运算符,即使有,构造 if x is a or b
也意味着 "if x is a or x is b" 在几乎没有任何编程语言中存在。还有一些其他的事情,但我想这已经有点太字面意思了。
你打算写这样的东西:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
xmlns:ns3="http://www.randomnamespace.com/example/awesomestuff"
>
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="ns3:Image">
<JPEG2000>
<xsl:choose>
<xsl:when test="substring(ns3:DataSource,1,2) = ('jP','OQ')">Yes</xsl:when>
<xsl:otherwise>No</xsl:otherwise>
</xsl:choose>
</JPEG2000>
</xsl:template>
</xsl:stylesheet>