두 개의 상자로 구성된 클러스터 된 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:
`
결과는이 가짜 코드처럼 테스트 할 수 있어야합니다. - 자녀 있어요? -yes {아이들 위에 반복} - '목록'객체가 있습니까? -yes {list sub를 가져 와서 fakie html thumb에 넣는다} -no {next parent}' – ASheppardWork
실제 XML을 덤프 된 표현 대신 게시 할 수 있는가? 시간이 있으면 뭔가 쓸 수 있습니다. 재귀 코드를 보여줘야합니다. 기회는, 당신을 교수형에 처하는 문법처럼 단순한 무언가 일뿐입니다. 우선, struct 키를 동적으로 처리하는 방법은 다음과 같습니다. myStruct [keyname] –
정확한 XML을 내부 보고서이므로 덤프 할 수 없습니다. 그러나 나는 더미 하나를 얻는 것을 볼 것이다. – ASheppardWork