2012-04-04 56 views
0

下面是一個簡化示例,它爲我正在嘗試修復的錯誤創建了一個相同的錯誤。元素XMLFileDefinition未在類型爲class coldfusion.xml的Java對象中定義.XmlNodeList

<cfscript> 
    private xml function getBaseRequest() { 
     // Set up the root xml element 
     var xmlReturn = XmlNew(true); 
     xmlReturn.xmlRoot = xmlElemNew(xmlReturn,'testbase'); 

     // Attach a child with generic name 
     ArrayAppend(xmlReturn['testbase'].XmlChildren,xmlElemNew(xmlReturn,'thisworks')); 

      // Add a child to that 
      ArrayAppend(xmlReturn['testbase']['thisworks'].XmlChildren,xmlElemNew(xmlReturn,'attachme')); 

     // Now attach a child with node name 'XMLFileDefinition' 
     ArrayAppend(xmlReturn['testbase'].XmlChildren,xmlElemNew(xmlReturn,'XMLFileDefinition')); 

      // And attempt to add a child to that 
      // produces error "Element XMLFileDefinition is undefined in a Java object of type class coldfusion.xml.XmlNodeList" 
      ArrayAppend(xmlReturn['testbase']['XMLFileDefinition'].XmlChildren,xmlElemNew(xmlReturn,'thisbreaks')); 

     return xmlReturn; 
    } 
</cfscript> 

爲了澄清,該XML時傾倒出來之前的線標記爲示數是根據由第三方,因此我們提供了一個架構如下

<?xml version="1.0" encoding="UTF-8"?> 
<testbase> 
    <thisworks> 
     <attachme/> 
    </thisworks> 
    <XMLFileDefinition/> 
</testbase> 

不幸的是需要此XML不能將節點重命名爲與ColdFusion更好地協同工作的節點。

UPDATE這似乎與節點名稱上的「XML」前綴有關。任何以「XML」爲前綴的節點似乎都會導致此問題。我已經添加了我的答案,詳細說明了如何解決此問題,但希望有人能夠提出更優雅/通用的解決方案,因爲我的方案存在一些潛在的缺陷。 CF /爪哇

版本如下:

  • 的ColdFusion版本:9,0,1,274733
  • Java版本:14.3-B01

我自己也嘗試更新,這仍然出現在以下版本

  • ColdFusion版本:9,0,1,274733(累積修補程序2)
  • Java版本:1.7.0_03

回答

0

經過進一步調查中,我確定這個問題是由試圖訪問其名稱的正則表達式匹配的XML節點所致。「XML *」(即在任何情況下,都以字母xml開頭)。我無法確定具體的解釋,但我會假定這涉及到用於引用XmlAttributes/XmlChildren/XmlText等的Xml ....鍵。

我最終用來解決這個問題的方法如下(截斷示例)

var xmlReturn = XmlNew(true); 
var nodeBody = xmlElemNew(xmlReturn,'RootElement'); 
xmlReturn.xmlRoot = nodeBody; 

var nodeXMLDefinition = xmlElemNew(xmlReturn,'XMLFileDefinition'); 
    ArrayAppend(nodeXMLDefinition.XmlChildren, xmlElemNew(xmlReturn,'SomeChildElement')); 
ArrayAppend(nodeBody.XmlChildren,nodeXMLDefinition); 
相關問題