Java 根据XSD验证XML,并使用验证结果丰富内容
我正在构建一个java工具来验证xml文档,并构建一个包含输入数据和验证结果的html报告。 我认为一种可能的方法是:Java 根据XSD验证XML,并使用验证结果丰富内容,java,xml,validation,xsd,Java,Xml,Validation,Xsd,我正在构建一个java工具来验证xml文档,并构建一个包含输入数据和验证结果的html报告。 我认为一种可能的方法是: 使用XSD验证XML 使用验证结果丰富XML 在最终的HTML报告中转换丰富的XML(这一点不是问题的目标) 首先,这是一种有效的方法吗?还是有更合适的方法用java完成这些事情 如果这是一个可行的解决方案,我如何实施步骤2 例如,如果我从这个输入文档开始: <parent> <child id="a correct id" type="a corre
<parent>
<child id="a correct id" type="a correct type"/>
<child id="an incorrect id" type="an incorrect type"/>
</parent>
如何生成这样一个丰富的输出文档:
<parent>
<child id="a correct id" type="a correct type">
<results>
<result>id is correct</result>
<result>type is correct</result>
</results>
</child>
<child id="an incorrect id" type="an incorrect type">
<results>
<result>id is NOT correct</result>
<result>type is NOT correct</result>
</results>
</child>
</parent>
身份证是正确的
类型是正确的
身份证不正确
类型不正确
首先,有很多方法可以做到这一点。还有其他类似的工具提供了描述验证结果的语言,以及将验证结果转换为漂亮HTML的能力。有许多java包实际上执行模式验证,所以您要完成的大部分工作应该是“粘合代码”。确保不要尝试在java代码中进行模式验证
所以接下来,我不确定您希望在验证后转换原始XML文件的要求是什么。通常,您会将验证结果集转储为单独的文件。原始XML的模式是否允许您添加内容
通常,如果您想转换原始输入,可以编写一个XSLT程序,获取验证结果文件和原始源文件,然后使用这些验证结果转换原始文件。但我不建议这样做,因为我认为您的情况可能需要一种不转换原始文件的不同设计,除非您有更多的要求,您想深入了解
另一种选择是直接的DOM操作。在验证之后,您可以对其进行操作,然后将其写回相同的原始文件
但是说真的——在你为第二步采取任何方法之前,确保你的需求真的需要它。首先,有很多方法可以做到这一点。还有其他类似的工具提供了描述验证结果的语言,以及将验证结果转换为漂亮HTML的能力。有许多java包实际上执行模式验证,所以您要完成的大部分工作应该是“粘合代码”。确保不要尝试在java代码中进行模式验证 所以接下来,我不确定您希望在验证后转换原始XML文件的要求是什么。通常,您会将验证结果集转储为单独的文件。原始XML的模式是否允许您添加内容 通常,如果您想转换原始输入,可以编写一个XSLT程序,获取验证结果文件和原始源文件,然后使用这些验证结果转换原始文件。但我不建议这样做,因为我认为您的情况可能需要一种不转换原始文件的不同设计,除非您有更多的要求,您想深入了解 另一种选择是直接的DOM操作。在验证之后,您可以对其进行操作,然后将其写回相同的原始文件
但是说真的——在你为第二步采取任何方法之前,确保你的需求真的需要它。首先,有很多方法可以做到这一点。还有其他类似的工具提供了描述验证结果的语言,以及将验证结果转换为漂亮HTML的能力。有许多java包实际上执行模式验证,所以您要完成的大部分工作应该是“粘合代码”。确保不要尝试在java代码中进行模式验证 所以接下来,我不确定您希望在验证后转换原始XML文件的要求是什么。通常,您会将验证结果集转储为单独的文件。原始XML的模式是否允许您添加内容 通常,如果您想转换原始输入,可以编写一个XSLT程序,获取验证结果文件和原始源文件,然后使用这些验证结果转换原始文件。但我不建议这样做,因为我认为您的情况可能需要一种不转换原始文件的不同设计,除非您有更多的要求,您想深入了解 另一种选择是直接的DOM操作。在验证之后,您可以对其进行操作,然后将其写回相同的原始文件
但是说真的——在你为第二步采取任何方法之前,确保你的需求真的需要它。首先,有很多方法可以做到这一点。还有其他类似的工具提供了描述验证结果的语言,以及将验证结果转换为漂亮HTML的能力。有许多java包实际上执行模式验证,所以您要完成的大部分工作应该是“粘合代码”。确保不要尝试在java代码中进行模式验证 所以接下来,我不确定您希望在验证后转换原始XML文件的要求是什么。通常,您会将验证结果集转储为单独的文件。原始XML的模式是否允许您添加内容 通常,如果要转换原始输入,
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="parent">
<xsl:for-each select="child">
<xsl:call-template name="processChildren"/>
</xsl:for-each>
</xsl:template>
<!-- this template processes the children nodes, applying a sample test clause -->
<xsl:template name="processChildren">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<results>
<xsl:choose>
<xsl:when test="contains(@id,'incorrect')">
<result>id is NOT correct</result>
</xsl:when>
<xsl:otherwise>
<result>id is correct</result>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="contains(@type,'incorrect')">
<result>type is NOT correct</result>
</xsl:when>
<xsl:otherwise>
<result>type is correct</result>
</xsl:otherwise>
</xsl:choose>
</results>
</xsl:copy>
</xsl:template>
<!-- this template copy the contents of the node unaltered -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>