gpt4 book ai didi

xml - 使用 JAX-B 解码后如何检索定义的命名空间声明

转载 作者:行者123 更新时间:2023-12-04 16:56:32 26 4
gpt4 key购买 nike

我有一个 XML 文档,其中包含我需要在应用程序中使用的 XPath 表达式。由于我必须为 Jaxen 定义命名空间,因此我需要在 JAX-B 解码后检索原始 XML 文档中的命名空间。我将如何检索已声明的命名空间?谢谢。

(*克里斯*)

更多信息:

在应用映射时,我需要向 JDOM/Jaxen XPath 处理器提供命名空间。 (/.../用于简洁)

<mappings set="RTE" xmlns="http://www.powerschool.com/mappings" xmlns:sif="http://www.sifinfo.org/infrastructure/2.x" xmlns:ntc="http://stumo.transcriptcenter.com">
<mapping name="Area">
<endpoint end="SIF" type="XML">
<xpath>/sif:StudentRecordExchangeData/.../sif:SIF_ExtendedElement[@Name="StudentDemographicRecordExtensions"]/.../ntc:Area</xpath>
</endpoint>
</mapping>
</mappings>

最佳答案

通常,jaxb 对象是根据它们的 namespace 解码的,因此 namespace 与您的 JAXB 对象相关联。特别是,如果您从 XSD 生成 JAXB 类,则包 (jaxbObject.getCLass().getPackage() 将具有包含声明命名空间的注释信息。

您可以通过困难的方式来查找包对象及其注释,或者您可以使用上下文实例中的 JAXBIntrospector。因此,假设您的 jaxb 对象是 'jaxbObject',而 'jaxbContent' 是您的 JAXBContext 实例:

 JAXBIntrospector introspector = jaxbContext.createJAXBIntrospector();
if (!introspector.isElement(jaxbObject))
throw new JAXBException("Type '" + objectToMarshall.getClass().getName() + "' is not a JAXB object.");

QName qname = introspector.getElementName(jaxbObject);
if (qname == null)
throw new JAXBException("Type '" + jaxbObject.getClass().getName()
+ "' is not a JAXB object instance.");

String namespaceUri = qname.getNamespaceURI();

关于xml - 使用 JAX-B 解码后如何检索定义的命名空间声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com