Java 对具有任意属性的HTML文件的限制
我有一个HTML文件。此文件中的某些元素用特殊属性标记:例如level0=“level0 name”、level1=“level1 name”、level2=“name” 如何检查此属性是否具有所需的结构 a。级别必须嵌套为其索引 b。同一“级别”上的级别名称应该是不同的 c。level0必须至少有一个level1元素 d。一个HTML元素只能有一个级别属性 更新1:c。属性为“level0”的Html元素必须至少有一个属性为“level1”的降序Html元素 更新2:非常重要的一点是,错误消息要简单易懂 对于解析HTML,我使用的是Java 对具有任意属性的HTML文件的限制,java,xml,xpath,jsoup,Java,Xml,Xpath,Jsoup,我有一个HTML文件。此文件中的某些元素用特殊属性标记:例如level0=“level0 name”、level1=“level1 name”、level2=“name” 如何检查此属性是否具有所需的结构 a。级别必须嵌套为其索引 b。同一“级别”上的级别名称应该是不同的 c。level0必须至少有一个level1元素 d。一个HTML元素只能有一个级别属性 更新1:c。属性为“level0”的Html元素必须至少有一个属性为“level1”的降序Html元素 更新2:非常重要的一点是,错误消息
JSoup
,但到目前为止,我是开放的。我可以想象使用XSD模式或XPath。或者它在Java中的一些组合。我希望向用户显示简单合理的错误消息
<body>
<div level0="lvl0-0">
<div>
...
<span level1="lvl1-0">
<p level2="lvl2-0"> text goes here </p>
<p level2="lvl2-1"> textY goes here </p>
</span>
<span level1="lvl1-1">
<p level2="lvl2-0"> text goes here </p>
</span>
...
<div>
<div>
<div class="bla">
<div level0="lvl0-1">
<span level1="lvl1-0">
<p level2="lvl2-0"> text goes here </p>
</span>
<div>
</div>
</body>
...
文本位于此处
这里有textY
文本位于此处
...
文本位于此处
您应该创建一个XSD,然后使用Xerces之类的工具来验证该结构
请参阅以获取一个好的示例。谢谢您的回答。XSD是否生成简单的错误消息?据我所知,您不能设置限制,例如
c。level0必须在xsd中至少有一个level1的元素(他说的是属性,不是xml元素)。xsd不会产生任何错误消息。这是元素定义。用于根据XSD验证XML内容的工具(例如Xerces)将产生错误。使用jsoup实现这一点应该不是问题。我建议首先设计测试用例,这样您就可以验证解析器/验证器的行为(某种测试驱动开发)。您在使用jsoup时面临哪些问题?