将“ XML元素”解组为字符串属性

爱德华多:

使用JAXB,我想解组下一个xml:

<con:fault xmlns:con="http://www.bea.com/wli/sb/context">
  <con:errorCode>BEA-382505</con:errorCode>
  <con:reason>OSB Validate action failed validation</con:reason>
  <con:details>
      .... MORE XML tags ...
  <con:details>
</con:fault>

我想在下一个对象中解组:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Fault", propOrder = {
 "errorCode",
 "reason",
 "details"
})
public class Fault {

  @XmlElement(required = true)
  protected String errorCode;
  @XmlElement(required = true)
  protected String reason;
  @XmlElement(required = true)
  protected String details;

  ... getters and setters ...
}

错误代码和原因属性已正确填充,但详细信息属性未填充“ con:details”元素内的XML内容。

谢谢

戴尔·詹姆斯(Dale K James):

如果<con:details>tag具有子XML元素,则details变量应该是Details类的对象,而不是String。Details类应包含<con:details>标记的子元素

编辑:

@XmlJavaTypeAdapter可用于定义用于自定义封送处理的XMLAdapter。

故障类

@XmlRootElement
public class Fault {
    @XmlElement(required = true)
    protected String errorCode;

    @XmlElement(required = true)
    protected String reason;

    @XmlElement(name = "details")
    @XmlJavaTypeAdapter(value = DetailsHandler.class)
    protected String details;
}

DetailsHandler.class

public class DetailsHandler extends XmlAdapter<Object, String> {

    /**
     * Factory for building DOM documents.
     */
    private final DocumentBuilderFactory docBuilderFactory;
    /**
     * Factory for building transformers.
     */
    private final TransformerFactory transformerFactory;

    public DetailsHandler() {
        docBuilderFactory = DocumentBuilderFactory.newInstance();
        transformerFactory = TransformerFactory.newInstance();
    }

    @Override
    public String unmarshal(Object o) throws Exception {
        Element titleElement = (Element) o;

        // If there is no child nodes, return empty string
        if (!titleElement.hasChildNodes()) {
            return "";
        }

        // Getting the "details" child elements
        NodeList anchorElements = titleElement.getChildNodes();

        StringWriter stringWriter = new StringWriter();
        StreamResult result = new StreamResult(stringWriter);

        for (int i = 0; i < anchorElements.getLength()-1; i++) {

            // Fetching the child elements one by one
            Element anchor = (Element) anchorElements.item(i);
            // Creating a DOMSource as input for the transformer
            DOMSource source = new DOMSource(anchor);
            // Default transformer: identity tranformer (doesn't alter input)
            Transformer transformer = transformerFactory.newTransformer();
            // This is necessary to avoid the <?xml ...?> prolog
            transformer.setOutputProperty("omit-xml-declaration", "yes");
            // Transform to a StringWriter
            transformer.transform(source, result);
        }
        // Returning result as string
        return stringWriter.toString();
    }

    @Override
    public Object marshal(String s) throws Exception {
        // custom implementation if required
        return null;
    }
}

该链接可以提供更多详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将嵌套的XML元素解组为字符串数组?

使用StAX将XML元素提取为包括属性名称空间的字符串

如何使用go的json标签将数字和字符串属性解组为字符串值

将XML元素名称解组为其他属性

将XML字符串解析为kXML元素

将 XML 子元素解析为字符串

得到:无法将字符串解组为Go值

如何将空字符串解组为nil

将JSON字符串解组为常量

将字符串解析为属性

将 XML 属性解组为对象值

如何将Vue属性设置为字符串化元素属性的值?

使用xslt将分号将字符串分隔为xml元素

如何将 css 属性设置为我作为字符串获取的 html 元素

将json字符串解组到具有结构本身一个元素的结构

无法将字符串解组为int64类型的Go值

json:无法将字符串解组为main.test_struct类型的Go值

如果将值为null的字符串编码的json int解组,则使用null之前的值

将嵌套的字符串切片解组为 float32

json:无法将字符串解组为[] main.KVU类型的Go值

Golang-无法将数字解组为字符串类型的Go值

Golang:JSON:如何将字符串数组解组为[] int64

无法将字符串解组为struct类型的Go值

Docker返回“ json:无法将字符串解组为[] string类型的Go值”

如何将Akka HTTP请求实体解组为字符串?

使用 JAXB,如何将具有属性定义类型的 XML 元素解组为基于该属性的对象?

将元素的innerHTML 设置为随机字符串

将反应元素构建为字符串

将向量元素解析为R中的字符串