解析并更新liferay Web内容

时间:2016-04-03 13:11:04

标签: java xml liferay sax

我有一个JournalArticle web content,其中包含以下部分。

<root available-locales="en_GB" default-locale="en_GB">
    <dynamic-element name="image-id" type="text" index-type="keyword" index="0">
        <dynamic-content language-id="en_GB">
            <![CDATA[ENG_ID1]]>
        </dynamic-content>
    </dynamic-element>
    <dynamic-element name="main-picture" type="document_library" index-type="keyword" index="0">
        <dynamic-element name="main-picture-url" index="0" type="text" index-type="keyword">
            <dynamic-content language-id="en_GB">
                <![CDATA[http://localhost:8080/documents/11111/22222/Image1/c9ff3112-22a1-4a45-a5d7-ea0b687fa34f?t=1450349423000]]>
            </dynamic-content>
        </dynamic-element>
        <dynamic-content language-id="en_GB">
            <![CDATA[/documents/11111/22222/Image2/c9ff3113-23a1-4a35-a1d7-ea0b127fa34f?t=1450349423000]]>
        </dynamic-content>
    </dynamic-element>
</root>

我试图解析xml并使用下面动态内容中的一个更新main-picture-url内的网址,如果值为NotEmpty。

String HOST = "localhost";
String PORT = "8080";
Document contentDocument = SAXReaderUtil.read(content);

List<String> elementNames = Arrays.asList("main-picture");
for (String elementName : elementNames) {
    Node mainNode = contentDocument.selectSingleNode("/root/dynamic-element[@name='"+elementName+"']/dynamic-content");
    Node urlNode = contentDocument.selectSingleNode("/root/dynamic-element[@name='"+elementName+"']/dynamic-element/dynamic-content");

    Integer urlNodeIndex = contentDocument.indexOf(urlNode);
    String mainValue = mainNode.getText();
    if(!mainValue.equalsIgnoreCase("")) {
        urlNode.setText("http://"+HOST+":"+PORT+mainValue);

        System.out.println("urlValue is ---> "+urlNode.getText());
    }
}

如上所示,我可以提取值并将其设置为urlNode。但我完全混淆了如何将此urlNode设置回内容。我在SAXReaderUtil中找不到任何方法来帮助我更新content

有什么方法可以更新内容?

1 个答案:

答案 0 :(得分:1)

答案很简单。 我只是必须做

content = contentDocument.asXML()

将更新的文档作为内容重新设置。