2016-08-08 44 views
0

我想在含有該結構從入口節點讀取CDATA「Testlabel」 liferay的結構和模板的元數據:訪問與速度

<dynamic-element fieldNamespace="ddm" indexType="keyword" localizable="true" name="Label_Tag" readOnly="false" repeatable="false" required="false" showLabel="true" type="ddm-separator" width=""> 
    <meta-data locale="nl_NL"> 
     <entry name="label"> 
      <![CDATA[Testlabel]]> 
     </entry> 
     <entry name="predefinedValue"> 
      <![CDATA[]]> 
     </entry> 
     <entry name="tip"> 
      <![CDATA[]]> 
     </entry> 
     <entry name="style"> 
      <![CDATA[]]> 
     </entry> 
    </meta-data> 
</dynamic-element> 

在應用程序顯示模板用於AssetPublisher,我用:

#foreach ($entry in $entries) 
    #set ($renderer = $entry.getAssetRenderer()) 
    #set ($className = $renderer.getClassName()) 

    #if ($className == "com.liferay.portlet.journal.model.JournalArticle") 

     ## read article properties 
     #set ($article = $renderer.getArticle()) 

     ## read webcontent as xml 
     #set ($document = $saxReaderUtil.read($article.getContent())) 
     #set ($rootElement = $document.getRootElement()) 

     ## read general elements from webcontent 
     #set ($xPathSelector = $saxReaderUtil.createXPath("dynamic-element[@name='Label_Tag']/meta-data/entry[@name='label']")) 
     #set ($strLabel = $xPathSelector.selectSingleNode($rootElement).getText()) 

$ xPathSelector $xPathSelector<br> 
$ strLabel $strLabel <br> 

    #end 
#end 

不工作,它打印:

$ xPathSelector [XPath: dynamic-element[@name='Label']/meta-data/entry[@name='label']] 
$ strLabel $strLabel 

$ strLabel不 填充。什麼是錯的?

+0

$標籤與標籤$? –

+0

@Olaf Kock,將$ Label更改爲$ Label_Tag,將$ label更改爲$ strLabel,但這沒有幫助。 –

回答

0

你是XPath表達式是正確的;使用xmllint把它應用到你的樣品時,我得到以下結果:

> xmllint -xpath "dynamic-element[@name='Label_Tag']/meta-data/entry[@name='label']" ~/test.xml 
<entry name="label"> 
    <![CDATA[Testlabel]]> 
</entry> 

也許將text()到您的XPath查詢可能會有所幫助:

> xmllint -xpath "dynamic-element[@name='Label_Tag']/meta-data/entry[@name='label']/text()" ~/test.xml 
<![CDATA[Testlabel]]> 
+0

注意到,更新了問題 –