Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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
Java 如何检测所需的XML属性?_Java_Xml_Xsd_Xml Parsing - Fatal编程技术网

Java 如何检测所需的XML属性?

Java 如何检测所需的XML属性?,java,xml,xsd,xml-parsing,Java,Xml,Xsd,Xml Parsing,我有一个没有定义属性的XML内容,如下所示: <rootElement> <subElement1/> </rootElement> 我想用XML模式(XSD)中为此XML定义的必需属性填充此XML内容 例如,根据XSD,subElement1具有必需的属性“id” (对于Java处理)检测并将这些属性添加到XML的最佳方法是什么? 我们需要添加所需的属性,并为它们设置适当的值 因此,例如上面的示例,我们需要具有以下XML: <rootEle

我有一个没有定义属性的XML内容,如下所示:

<rootElement>
   <subElement1/>
</rootElement>

我想用XML模式(XSD)中为此XML定义的必需属性填充此XML内容

例如,根据XSD,subElement1具有必需的属性“id”

(对于Java处理)检测并将这些属性添加到XML的最佳方法是什么? 我们需要添加所需的属性,并为它们设置适当的值

因此,例如上面的示例,我们需要具有以下XML:

<rootElement>
   <subElement1 id="some-value"/>
</rootElement>


使用DOM解析器。有方法遍历XML树、访问、插入和删除节点

使用DOM解析器。有方法遍历XML树、访问、插入和删除节点

我建议您使用JAXB。在互联网上搜索教程

进一步处理JAXB的步骤

  • 通过提供模式,使用JAXB生成Java文件
  • 将XML解组到生成的Java类(bean)。不要在此处执行验证或设置验证处理程序
  • 用适当的值填充这些类<代码>必需元素可以使用注释查找找到。元素的JAXB注释看起来像是,
    @xmlement(name=“ElementName”,required=true)
    。属性注释与此类似,
    @xmltattribute(required=true)
  • 将bean封送回XML。您可以在编组时使用
    ValidationHandler
    验证bean。下面是示例代码片段

    marshller = JAXBContext.newInstance(pkgOrClassName).createUnmarshaller();
    marshller.setSchema(getSchema(xsd)); // skip this line for unmarshaller
    marshller.setEventHandler(new ValidationHandler()); // skip this line for unmarshaller
    

  • 我建议您为此使用JAXB。在互联网上搜索教程

    进一步处理JAXB的步骤

  • 通过提供模式,使用JAXB生成Java文件
  • 将XML解组到生成的Java类(bean)。不要在此处执行验证或设置验证处理程序
  • 用适当的值填充这些类<代码>必需元素可以使用注释查找找到。元素的JAXB注释看起来像是,
    @xmlement(name=“ElementName”,required=true)
    。属性注释与此类似,
    @xmltattribute(required=true)
  • 将bean封送回XML。您可以在编组时使用
    ValidationHandler
    验证bean。下面是示例代码片段

    marshller = JAXBContext.newInstance(pkgOrClassName).createUnmarshaller();
    marshller.setSchema(getSchema(xsd)); // skip this line for unmarshaller
    marshller.setEventHandler(new ValidationHandler()); // skip this line for unmarshaller
    

  • 在XML模式定义(即XSD文件)中,默认情况下属性是可选的。要使属性成为必需属性,必须定义:

    <xs:attribute name="surname" type="xs:string" use="required"/>
    

    希望这能澄清您的问题。

    在XML模式定义(即XSD文件)中,默认情况下属性是可选的。要使属性成为必需属性,必须定义:

    <xs:attribute name="surname" type="xs:string" use="required"/>
    

    希望这能澄清您的问题。

    我对Cris有相同的想法,但我认为使用此验证器,您不知道发生错误的时间点。
    我认为您必须创建或扩展您自己的验证器。

    我对Cris有相同的想法,但我认为使用此验证器,您没有关于发生错误点的信息。
    我认为您必须创建或扩展自己的验证器。

    我知道。但是我如何找到所需的属性呢?我被监视了SAX解析器,但没有找到如何做。检查这个。您激活验证并使用错误处理程序…可能是一个解决方案是的,我有这个想法只是为了以防万一。但是我如何找到所需的属性呢?我被监视了SAX解析器,但没有找到如何做。检查这个。激活验证并使用错误处理程序……可能是一个解决方案是的,我有这个想法只是为了以防万一,我知道如何在XSD中定义所需的属性,但这不是我的任务。我只想在XML中插入所有必需的属性一旦有了表示XML实体的JAXB类,就可以使用反射来查询所需属性的注释。我知道如何在XSD中定义所需属性,但这不是我的任务。我只想在XML中插入所有必需的属性一旦有了表示XML实体的JAXB类,就可以使用反射来查询所需属性的注释。这可能是静态XML和xsd的好方法。但是我必须在我的数据库中动态地安排属性code@Nawa:您的xsd/schema很可能会被修复。但是,XML可以是遵循该模式的任何文件。但我相信这会奏效的。否则,请详细说明您遇到的确切问题。初始xml通常不包含属性,只存在标记,由于缺少必需的属性,它可能在架构上无效。我想在初始xml中填充所有必需的属性以使其有效。@Nawa:那也可以。在解组时不要设置验证处理程序,只在编组时设置。我希望你明白我的意思。我也在更新我的帖子。这可能是静态xml和xsd的好方法。但是我必须在我的数据库中动态地安排属性code@Nawa:您的xsd/schema很可能会被修复。但是,XML可以是遵循该模式的任何文件。但我相信这会奏效的。否则,请详细说明您遇到的确切问题。初始xml通常不包含属性,只存在标记,由于缺少必需的属性,它可能在架构上无效。我想在初始xml中填充所有必需的属性以使其有效。@Nawa:那也可以。在解组时不要设置验证处理程序,只在编组时设置。我希望你明白我的意思。我也在更新我的帖子。