我有一个 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-set
和name="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代码。
答案 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
。