无法使用Java编辑XSL属性值

时间:2018-08-16 06:42:32

标签: java xml xslt

我有一个 XSL 文件,我想在其中使用 java 代码更新属性标签值。 这是我的 XSL 文件:-

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
    version="2.0">

    <xsl:attribute-set name="__frontmatter">
        <xsl:attribute name="text-align">center</xsl:attribute>
    </xsl:attribute-set>
</xsl:stylesheet>

我想读取父标签"__frontmatter",然后在此子节点标签"text-align"下读取并更新值center

我知道要从 XML 文件读取节点名称,但这使我感到困惑,如何从Java代码读取xsl:attribute-setname="xyz"

编辑:-添加方法。

private static void updateElementValue(Document doc) {
        String a="right";
        NodeList frontmatterr = doc.getElementsByTagName("text-align");
        Element e = null;
        for(int i=0; i<frontmatterr.getLength();i++){
            e = (Element) frontmatterr.item(i);
            Node name = emp.getElementsByTagName("text-align").item(0).getFirstChild();
            name.setNodeValue(name.getNodeValue().valueOf(a));
        }
    }

我试图读取xsl节点的Java代码。

1 个答案:

答案 0 :(得分:1)

尽管您在评论中说“不能使用另一个XSLT文件”,但我认为XSLT是操作XSLT的正确工具,因此我在此处发布了有关XSLT的建议

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:param name="new-text-align">right</xsl:param>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="xsl:attribute-set[@name = '__frontmatter']/xsl:attribute[@name = 'text-align']">
      <xsl:copy>
          <xsl:copy-of select="@*"/>
          <xsl:value-of select="$new-text-align"/>
      </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

在线https://xsltfiddle.liberty-development.net/bdxtqo/1,您可以将原始XSLT转换为

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

    <xsl:attribute-set name="__frontmatter">
        <xsl:attribute name="text-align">right</xsl:attribute>
    </xsl:attribute-set>
</xsl:stylesheet>

在Java JAXP API中,您只需设置带有以上XSLT作为源(https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/Transformer.html)的Transformer https://docs.oracle.com/javase/8/docs/api/javax/xml/transform/TransformerFactory.html#newTransformer-javax.xml.transform.Source-,然后使用原始XSLT作为输​​入Source并将获得新的XSLT作为Result方法的transform