javaxsl模板匹配
是否有人知道java或任何软件包中有一种简洁的方法可以让我检查DOM中的节点是否与xsl样式表中的模板匹配 比如,javaxsl模板匹配,java,xml,dom,xslt,Java,Xml,Dom,Xslt,是否有人知道java或任何软件包中有一种简洁的方法可以让我检查DOM中的节点是否与xsl样式表中的模板匹配 比如, <xsl:template match="elem/child/item"> ... </xsl:template> 当然,使用的模式可以是任何类型的XPath表达式,可以用作xsl样式表中的模板匹配 如果有人知道一种通过包等实现的好方法,我将不胜感激。谢谢,这不是非常高效,但您可以在文档上运行xpath,看看它是否返回有问题的节点。Saxon的XP
<xsl:template match="elem/child/item">
...
</xsl:template>
当然,使用的模式可以是任何类型的XPath表达式,可以用作xsl样式表中的模板匹配
如果有人知道一种通过包等实现的好方法,我将不胜感激。谢谢,这不是非常高效,但您可以在文档上运行xpath,看看它是否返回有问题的节点。Saxon的XPathCompiler对象: 有一个compilePattern()方法,允许您编译XSLT模式。这是以XPathExecutable的形式返回的,可以通过(a)提供目标节点作为上下文节点进行计算,以及(b)计算表达式以返回布尔值进行计算,如果模式与节点匹配,则返回true,否则返回false。使用:
//elem/child/item
这将精确选择XML文档中由匹配模式匹配的所有节点elem/child/item
要验证给定节点$n是否与模板匹配,请使用以下XPath表达式:
count($n | //elem/child/item) = count(//elem/child/item)
或者(这可能更有效):
请注意,一个节点由匹配模式匹配并不意味着将选择模板来处理该节点(或选择任何模板)。处理模板的选择取决于现有的
,取决于是否有其他具有更高导入优先级或优先级的模板也与同一节点匹配。您需要什么
InputSource source = new InputSource(new FileInputStream("myfile.xml"));
//Document source = ...; //or use a DOM document as the source
String expression = "//elem/child/item"; //XPath expression
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList matches = (NodeList)xPath.evaluate(expression, source, XPathConstants.NODESET);
System.out.println("Match count: " + matches.getLength());
这正是我想要的,不幸的是,这需要搬到撒克逊人,而撒克逊人并不是我想要的
$n[self::item
and
parent::node()
[self::child
and
parent::node()
[self::elem]
]
]
InputSource source = new InputSource(new FileInputStream("myfile.xml"));
//Document source = ...; //or use a DOM document as the source
String expression = "//elem/child/item"; //XPath expression
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList matches = (NodeList)xPath.evaluate(expression, source, XPathConstants.NODESET);
System.out.println("Match count: " + matches.getLength());