2015-02-06 8 views
0

두 개의 상자로 구성된 클러스터 된 ColdFusion 8 환경이 있습니다. Cognos 10.1에서 작성한 XML을 트래버스하여 XML에 나타나는 순서대로 모든 요소를 ​​찾습니다. 목적은 요소의 아이콘을 대체하는 보고서의 고유 한 레이아웃에 대한 축소판 html 표현을 작성하는 것입니다.ColdFusion 8의 XML 재귀 쿼리로 하위 하위 수준 알 수 없음

Cognos는 보고서의 각 새 개체에 대해 새로운 [block]. [content] 요소를 배치 한 다음 보고서를 만들 때 결정된 계층화 된 순서에 따라 해당 요소를 중첩합니다. 예를 들어

앱 복잡성의 불확 실한 양이있을 것이다

html.body.report.layouts.layout.reportPages.page [...] 
pageBody 
     block 
      contents 
        block=list 
        block 
         contents=column 

각 보고서를 통해 통과해야 할 하나의 열이있는 목록 개체에 넣어합니다. 내가 cfgroovy와 CF8에 대한 벤 Nadel의 기술을 사용하여 XML을 구문 분석하고 사용할 수있는 XML 소스 있습니다.

이제 "목록"이 존재하고 파일에있는 순서를 찾아야합니다. 루프에서

지금까지 내가 사용한 적이 루프 같은 :

<cfset cleanedXml = xmlParse(xhtml) /> 
<cfloop array="#XmlSearch(cleanedXml.html.body.report.layouts.layout.reportPages.page,'./.')#" index="i"> 
    <cfoutput> 
     <cfif structKeyExists(i, "xmlattributes")> 
      <cfloop collection="#i.xmlattributes#" item="a"> 
       #a#: #i.xmlAttributes[a]#<br/> 
      </cfloop> 
     </cfif> 
     <cfloop array="#i.xmlchildren#" index="x"> 
     #x.xmlName#: #x.xmlText#<br/> 

      <cfif structKeyExists(x, "xmlchildren") > 
       <cfloop array="#x.xmlchildren#" index="z"> 
       #z.xmlName#: #z.xmlText#<br/> 
       </cfloop> 
      </cfif> 

     </cfloop> 
    </cfoutput> 
    <br/> 
</cfloop> 

단, 아래 두 가지 수준을가는 것을 (때문에 두 루프).

나는 또한 벤과 Recusion을 시도했다 : CF8 동적으로 전달 된 부모 노드를 가진 좋아하지 않기 때문에 실패 http://www.bennadel.com/blog/1069-ask-ben-simple-recursion-example.htm

.

cleanedXml.html.body.report.layouts.layout.reportPages.page 작품과 cleanedXml.html.body.report.layouts.layout.reportPages.page.#parentString#이 간단한 수정해야처럼되지

것 같다 않습니다,하지만 난 단지 과거가 첫 번째를 끊을 각각의 잠재적 수준에 대한 루프 또는 재귀를 가질 필요 얻을 수 없다 누군가 내가 예상했던 것보다 한 단계 더 많은 보고서를 썼을 때.

cfml에서 수행 할 수없는 경우; 기꺼이 jQuery에서 해보고 싶지만 jQuery가 제한되어 있으므로 처음부터 다시 시작하려고합니다.

다음은 작은 보고서 파일 인 1400 줄 xml의 작은 샘플입니다.라인 195에 "list"가 있고 라인 226에 "listColumn"이 있습니다.이 두 가지가 모두이 순서로 필요합니다.

` 
xmlresults - array - Top 1 of 1 rows 

1) [xml element] 
XmlName: pageBody 
XmlNsPrefix:  
XmlNsURI: http://www.w3.org/1999/xhtml 
XmlText:  
XmlComment: 
XmlAttributes: [struct] 
XmlChildren: 
     [xml element] 
     XmlName: style 
     XmlNsPrefix:  
     XmlNsURI: http://www.w3.org/1999/xhtml 
     XmlText:  
     XmlComment: 
     XmlAttributes: [struct] 
     XmlChildren: 

     [xml element] 
     XmlName: contents 
     XmlNsPrefix:  
     XmlNsURI: http://www.w3.org/1999/xhtml 
     XmlText:  
     XmlComment: 
     XmlAttributes: [struct] 
     XmlChildren: 
       [xml element] 
       XmlName: block 
       XmlNsPrefix:  
       XmlNsURI: http://www.w3.org/1999/xhtml 
       XmlText:  
       XmlComment: 
       XmlAttributes: [struct] 
       XmlChildren: 
         [xml element] 
         XmlName: contents 
         XmlNsPrefix:  
         XmlNsURI: http://www.w3.org/1999/xhtml 
         XmlText:  
         XmlComment: 
         XmlAttributes: [struct] 
         XmlChildren: 
           [xml element] 
           XmlName: promptButton 
           XmlNsPrefix:  
           XmlNsURI: http://www.w3.org/1999/xhtml 
           XmlText:  
           XmlComment: 
           XmlAttributes: [struct] 
             type: back 
           XmlChildren: 
             [xml element] 
             XmlName: contents 
             XmlNsPrefix:  
             XmlNsURI: http://www.w3.org/1999/xhtml 
             XmlText:  
             XmlComment: 
             XmlAttributes: [struct] 
             XmlChildren: 

             [xml element] 
             XmlName: style 
             XmlNsPrefix:  
             XmlNsURI: http://www.w3.org/1999/xhtml 
             XmlText:  


             XmlComment: 
             XmlAttributes: [struct] 
             XmlChildren: 

           [xml element] 
           XmlName: HTMLItem 
           XmlNsPrefix:  
           XmlNsURI: http://www.w3.org/1999/xhtml 
           XmlText:  
           XmlComment: 
           XmlAttributes: [struct] 
           XmlChildren: 
             [xml element] 
             XmlName: dataSource 
             XmlNsPrefix:  
             XmlNsURI: http://www.w3.org/1999/xhtml 
             XmlText:  
             XmlComment: 
             XmlAttributes: [struct] 
             XmlChildren: 
               [xml element] 
               XmlName: staticValue 
               XmlNsPrefix:  
               XmlNsURI: http://www.w3.org/1999/xhtml 
               XmlText:  

               XmlComment: 
               XmlAttributes: [struct] 
               XmlChildren: 

           [xml element] 
           XmlName: textItem 
           XmlNsPrefix:  
           XmlNsURI: http://www.w3.org/1999/xhtml 
           XmlText:  
           XmlComment: 
           XmlAttributes: [struct] 
           XmlChildren: 
             [xml element] 
             XmlName: dataSource 
             XmlNsPrefix:  
             XmlNsURI: http://www.w3.org/1999/xhtml 
             XmlText:  
             XmlComment: 
             XmlAttributes: [struct] 
             XmlChildren: 
               [xml element] 
               XmlName: staticValue 
               XmlNsPrefix:  
               XmlNsURI: http://www.w3.org/1999/xhtml 
               XmlText: Note: Clicking the "Back" button will not clear any selected Filters. 
               XmlComment: 
               XmlAttributes: [struct] 
               XmlChildren: 

         [xml element] 
         XmlName: style 
         XmlNsPrefix:  
         XmlNsURI: http://www.w3.org/1999/xhtml 
         XmlText:  
         XmlComment: 
         XmlAttributes: [struct] 
         XmlChildren: 

         [xml element] 
         XmlName: conditionalStyles 
         XmlNsPrefix:  
         XmlNsURI: http://www.w3.org/1999/xhtml 
         XmlText:  
         XmlComment: 
         XmlAttributes: [struct] 
         XmlChildren: 
           [xml element] 
           XmlName: conditionalStyleCases 
           XmlNsPrefix:  
           XmlNsURI: http://www.w3.org/1999/xhtml 
           XmlText:  
           XmlComment: 
           XmlAttributes: [struct] 
             refvariable: back1 
           XmlChildren: 
             [xml element] 
             XmlName: conditionalStyle 
             XmlNsPrefix:  
             XmlNsURI: http://www.w3.org/1999/xhtml 
             XmlText:  
             XmlComment: 
             XmlAttributes: [struct] 
               refvariablevalue: 1 
             XmlChildren: 
               [xml element] 
               XmlName: CSS 
               XmlNsPrefix:  
               XmlNsURI: http://www.w3.org/1999/xhtml 
               XmlText:  
               XmlComment: 
               XmlAttributes: [struct] 
                 value: visibility:hidden 
               XmlChildren: 

           [xml element] 
           XmlName: conditionalStyleDefault 
           XmlNsPrefix:  
           XmlNsURI: http://www.w3.org/1999/xhtml 
           XmlText:  
           XmlComment: 
           XmlAttributes: [struct] 
           XmlChildren: 

       [xml element] 
       XmlName: block 
       XmlNsPrefix:  
       XmlNsURI: http://www.w3.org/1999/xhtml 
       XmlText:  
       XmlComment: 
       XmlAttributes: [struct] 
       XmlChildren: 
         [xml element] 
         XmlName: contents 
         XmlNsPrefix:  
         XmlNsURI: http://www.w3.org/1999/xhtml 
         XmlText:  
         XmlComment: 
         XmlAttributes: [struct] 
         XmlChildren: 
           [xml element] 
           XmlName: list 
           XmlNsPrefix:  
           XmlNsURI: http://www.w3.org/1999/xhtml 
           XmlText:  
           XmlComment: 
           XmlAttributes: [struct] 
             horizontalpagination: true 
             name: List1 
             refquery: Query1 
           XmlChildren: 
             [xml element] 
             XmlName: style 
             XmlNsPrefix:  
             XmlNsURI: http://www.w3.org/1999/xhtml 
             XmlText:  



             XmlComment: 
             XmlAttributes: [struct] 
             XmlChildren: 

             [xml element] 
             XmlName: listColumns 
             XmlNsPrefix:  
             XmlNsURI: http://www.w3.org/1999/xhtml 
             XmlText:  
             XmlComment: 
             XmlAttributes: [struct] 
             XmlChildren: 
               [xml element] 
               XmlName: listColumn 
               XmlNsPrefix:  
               XmlNsURI: http://www.w3.org/1999/xhtml 
               XmlText:  
               XmlComment: 
               XmlAttributes: [struct] 
               XmlChildren: 
                 [xml element] 
                 XmlName: listColumnTitle 
                 XmlNsPrefix:  
                 XmlNsURI: http://www.w3.org/1999/xhtml 
                 XmlText:  
                 XmlComment: 
                 XmlAttributes: [struct] 
                 XmlChildren: 
                   [xml element] 
                   XmlName: style 
                   XmlNsPrefix:  
                   XmlNsURI: http://www.w3.org/1999/xhtml 
                   XmlText:  


                   XmlComment: 
                   XmlAttributes: [struct] 
                   XmlChildren: 
                 ` 
+0

결과는이 가짜 코드처럼 테스트 할 수 있어야합니다. - 자녀 있어요? -yes {아이들 위에 반복} - '목록'객체가 있습니까? -yes {list sub를 가져 와서 fakie html thumb에 넣는다} -no {next parent}' – ASheppardWork

+0

실제 XML을 덤프 된 표현 대신 게시 할 수 있는가? 시간이 있으면 뭔가 쓸 수 있습니다. 재귀 코드를 보여줘야합니다. 기회는, 당신을 교수형에 처하는 문법처럼 단순한 무언가 일뿐입니다. 우선, struct 키를 동적으로 처리하는 방법은 다음과 같습니다. myStruct [keyname] –

+0

정확한 XML을 내부 보고서이므로 덤프 할 수 없습니다. 그러나 나는 더미 하나를 얻는 것을 볼 것이다. – ASheppardWork

답변

1

나는이 하나에 완전한 더미처럼 느낀다! 나는 나의 필요에 대한 해답을 발견했다. 꼭 내 질문이 아니야. 재귀를 사용하는 것이 아닙니다. 나는 내가 언급하지 않은 XmlSearch 코드를 다시 보았다. 왜냐하면 내가 이미 가능성을 배제했다고 생각했기 때문이다. 내가 잘못된 구문을 사용하고있는 것으로 나타났습니다! 찾은 후 : ColdFusion XmlSearch(): XPath with namespaces를 내가 갔다 유래에 these-하기에 주도

http://www.coldfusionguy.com/ColdFusion/blog/index.cfm/2008/9/26/XMLSearch-Specify-xmlns-namespaces-in-an-xPath-Search

http://www.bennadel.com/blog/827-nylon-technology-presentation-introduction-to-xpath-and-xmlsearch-in-coldfusion.htm

: 나는 순서로 결과를 표시하는 검색을 만들었습니다 http://www.w3.org/TR/xpath/

그들이 xml에 등장!이 글은 다음처럼

`<cfset listInXml = #XmlSearch(cleanedXml,"//*[ local-name()='list' or local-name()='combinationChart' ]")# >` 

이것은 차트, 차트, 목록, 차트 ... 등을 돌려 내 jsfiddle- 난 단지 벤 나델은 자신의 사이트에 있던 구문을 사용했기 때문에 내가 붙어있어 http://jsfiddle.net/asheppardwork/3uuaj5jb/1/

; 그 이후로 cf8에 대해 변경되었을 수도 있습니다.

다른 사람들이 같은 유형의 것을 찾는 데 도움이되기를 바랍니다.