2012-04-04 51 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); 
相关问题