Liferay store journal article localize content in xml format. Normally we use the velocity to get the data. But how to we get the value from our java code ?
Show sample journal’s xml content
Hide sample journal’s xml content
-
-
<?xml version="1.0" encoding="UTF-8"?>
-
<root default-locale="en_US" available-locales="en_US,fi_FI">
-
<dynamic-element instance-id="HThZWrt5"
-
name="title" type="text" index-type="">
-
-
<dynamic-content language-id="fi_FI">
-
<![CDATA[lorem ipsum]]>
-
</dynamic-content>
-
-
<dynamic-content language-id="en_US">
-
<![CDATA[English Title]]>
-
</dynamic-content>
-
</dynamic-element>
-
-
<dynamic-element instance-id="kPQ0EPt2" name="ingress"
-
type="text_area" index-type="">
-
-
<dynamic-content language-id="fi_FI">
-
<![CDATA[<p>FINNISH INGRESS</p>]]>
-
</dynamic-content>
-
-
<dynamic-content language-id="en_US">
-
<![CDATA[<p>ENGLISH INGRESS</p>]]>
-
</dynamic-content>
-
</dynamic-element>
-
-
<dynamic-element instance-id="lLq4bW9T"
-
name="image" type="image_gallery" index-type="">
-
-
<dynamic-content language-id="fi_FI">
-
<![CDATA[]]>
-
</dynamic-content>
-
-
<dynamic-content language-id="en_US">
-
<![CDATA[]]>
-
</dynamic-content>
-
-
</dynamic-element>
-
-
<dynamic-element instance-id="L2Q0Filu" name="author" type="text" index-type="">
-
<dynamic-content language-id="fi_FI">
-
<![CDATA[loongest]]>
-
</dynamic-content>
-
<dynamic-content language-id="en_US">
-
<![CDATA[loongest]]>
-
</dynamic-content>
-
</dynamic-element>
-
</root>
-
Getting custom element
Base on the sample journal xml content, if we want to get the localize ingress content. We can used liferay’s portal-kernel package such as SAXReaderUtil to parse the xml and get back the value. but we need to supply the locale.
-
-
OR
-
Sample Code
-
-
import com.liferay.portal.kernel.xml.Document;
-
import com.liferay.portal.kernel.xml.Node;
-
import com.liferay.portal.kernel.xml.SAXReaderUtil;
-
………..
-
{
-
String value = "";
-
try {
-
Document document =
-
SAXReaderUtil.read(article.getContentByLocale(locale));
-
-
Node node = document.selectSingleNode("/root/dynamic-element[@name='"
-
+ fieldname + "']/dynamic-content");
-
-
value = node.getText();
-
}
-
-
if(log.isErrorEnabled()){
-
log.error(e.getMessage());
-
}
-
}
-
-
return value;
-
}
-

Posted in 


