회사에서 현재 다이어그램 집합을 출력하는 게시를 만듭니다. 게시자가 주어진 특성 값을 사용하여 다이어그램을 검색 할 수 있습니다.자식 노드의 값을 기준으로 부모/조상 노드 선택
값이 첫 번째 속성 노드에 포함되어있는 경우에만 작동합니다.
나와 다른 동료가 모든 속성을 검색하도록 수정하려고했습니다.
다음은 속성 검색에 사용되는 xsl 코드입니다. 그것은 자식 다이어그램 요소가 사용자가 입력 한 단어를 포함하고 있는지보기 위해 폴더 다이어그램과 모양 요소를보고 있습니다. 여기
<xsl:template name="testObject">
<xsl:if test="(name() = 'Shape' and $includeShapes) or (name() = 'Folder' and $includeFolders) or (name() = 'Document' and $includeDocuments) or (name() = 'Diagram' and $includeDiagrams)">
<xsl:variable name="objXMLLocation">
<xsl:choose>
<xsl:when test="name() = 'Folder'">
<xsl:value-of select="concat(@ID, '/folder.xml')" />
</xsl:when>
<xsl:when test="name() = 'Document'">
<xsl:value-of select="concat(@ID, '/document.xml')" />
</xsl:when>
<xsl:when test="name() = 'Diagram'">
<xsl:value-of select="concat(@ID, '/diagram.xml')" />
</xsl:when>
<xsl:when test="name() = 'Shape'">
<xsl:value-of select="concat(../../@ID, '/', ../../@ID, '_files/', @Source)" />
</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:if test="js:fileExists($objXMLLocation)">
<xsl:variable name="objXML" select="document($objXMLLocation)" />
<xsl:choose>
<xsl:when test="$searchName">
<xsl:if test="js:containsKeywords($objXML/*/Properties/RepositoryName, $searchKeywords)">
<xsl:apply-templates mode="render" select=".">
<xsl:with-param name="fullXML" select="$objXML" />
</xsl:apply-templates>
</xsl:if>
</xsl:when>
<xsl:when test="$searchDescription">
<xsl:if test="js:containsKeywords($objXML/*/Properties/Description, $searchKeywords)">
<xsl:apply-templates mode="render" select=".">
<xsl:with-param name="fullXML" select="$objXML" />
</xsl:apply-templates>
</xsl:if>
</xsl:when>
<xsl:when test="$searchAttributes">
<xsl:if test="name() != 'Folder'">
<xsl:if test="js:containsKeywords($objXML/*/CustomAttributes/Attribute/Value,$searchKeywords)">
<xsl:apply-templates mode="render" select=".">
<xsl:with-param name="fullXML" select="$objXML" />
</xsl:apply-templates>
</xsl:if>
</xsl:if>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:if>
</xsl:template>
자바 스크립트 함수가 사용자에 의해 입력 된 검색 단어 바늘 파라미터의 문자열이 요소 값 또는 사용자가인지 특성 건초 파라미터 안에 존재하는지 보이는 containsKeyword 인 출판물 검색. 나는 정확히 무슨 일이 일어나는지 확신 할 수는 없지만 올바르게 작동하는 것처럼 보입니다.
function containsKeywords(haystack, needles) {
var ks = needles[0].selectNodes('//K');
var n;
if (haystack[0].firstChild) {
n = haystack[0].firstChild.nodeValue.toUpperCase();
} else {
return 0;
}
for (var i = 0; i < ks.length; i++) {
if (n.indexOf(ks[i].firstChild.nodeValue) < 0) {
return 0;
}
}
return 1;
}
xml이 검색됩니다. 그것은 첫째 속성 요소의 값 하위 요소에 존재하는 초안을 입력하면
<Diagram ID="49ab6eb5-c51f-4e36-9495-869897ef0d0d">
<CustomAttributes>
<Attribute>
<Name>Approval Status</Name>
<Description>Document/Diagram/Object Approval Status</Description>
<Value>Draft - Work in Progress</Value>
<Datatype>Text</Datatype>
</Attribute>
<Attribute>
<Name>Next Document Review Date</Name>
<Description>When is this document to be reviewed next?</Description>
<Value />
<Datatype>Date</Datatype>
</Attribute>
<Attribute>
<Name>Stakeholder View</Name>
<Description>Select the Stakeholder View</Description>
<Value>PMO</Value>
<Datatype>Text</Datatype>
</Attribute>
현재 XSL
다이어그램에 대한 링크를 렌더링합니다. 그러나 PMO를 검색하면 아무 것도 반환하지 않습니다.문제는 xsl이 CustomAttribute 요소의 모든 하위 요소를 살펴볼 때 xsl이 첫 번째 Attribute 요소 만 살펴 보는 것입니다.
for-each를 사용하여 xml 트리를 탐색하는 데 어려움이있는 모든 애트리뷰트 요소를 검토하여 다이어그램 조상을 가져 와서 렌더링에 사용할 수 있도록했습니다.
감사합니다.
이 질문은 전적으로 불분명합니다. XSLT 코드가하는 일 (코드의 아주 작은 부분 만 보여주고 있음)을 볼 수 없으며 달성하고자하는 것이 명확하지 않습니다. 또한 JS 코드가 문제와 관련이 있는지 여부는 명확하지 않습니다. 모니터링하고 xslt 질문에 대답하는 사람들이 JS를 잘하는 것을 기대하지 마십시오. JS가 중요하다면 적어도 JS 코드가하는 말을 설명하십시오. 즉, 질문을 다시 작성하십시오. –
나는 당신의 'js : containsKeywords ($ objXML/*/CustomAttributes/Attribute/Value, $ searchKeywords)'함수가 생각처럼 작동하지 않거나, 적어도 내가 보았을 곳이지만 Dimitre 말합니다, 거기에 포함되지 않은 것으로 말할 수있는 방법은 없습니다 – Woody
나는 자바 스크립트를 다시 추가하여 이것이 명확하게 보이거나 오류의 원인을 제거하는 데 도움이되기를 바랍니다. – ywm