Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaxsl模板匹配_Java_Xml_Dom_Xslt - Fatal编程技术网

javaxsl模板匹配

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

是否有人知道java或任何软件包中有一种简洁的方法可以让我检查DOM中的节点是否与xsl样式表中的模板匹配

比如,

<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());