2015-10-21 9 views
0

Я пытаюсь сортировать эти данные по полю фамилии внутри «ownerName». Является ли этот код в правильном месте для этого? Когда я пытаюсь запустить это, это дает мне ошибку синтаксического анализа.XSLT не будет сортировать по алфавиту по полю xml

<xsl:apply-templates select="storeloation" /><br/> 
    <xsl:apply-templates select="storeURL" /><br/> 
    <xsl:apply-templates select="storeDescription" /><br/> 
    <xsl:apply-templates select="related stores" /><br/> 
    <xsl:apply-templates select="storecustomerCount" /><br/> 
    <xsl:apply-templates select="storeVisits" /><br/> 
    <xsl:apply-templates select="storeestablished" /><br/> 
    <xsl:apply-templates select="ownersProfile/ownersName/firstName"/> 
    <xsl:apply-templates select="ownersProfile/ownersName/surname"/> 
     <xsl:sort select="surname" /><br/> 
    <xsl:apply-templates select="ownersProfile/ownersEmail"/><br/> 
    <xsl:apply-templates select="ownersProfile/ownersAddress"/><br/> 

Если я не ошибаюсь (что я, наверное, я) такого рода утверждение есть короткий сортировать каждый экземпляр матча шаблона по фамилии владельца?

ответ

1

Две ошибки здесь.

Во-первых, ошибка синтаксического анализа заключается в том, что xsl: sort должен быть дочерним элементом xsl: apply-templates, а не братом.

Во-вторых, выражение выбора xsl:sort оценивается с каждым элементом в последовательности, сортируемой как узел контекста. Эти предметы в вашем случае: surname элементов. Я подозреваю, что элементы surname не имеют дочернего элемента с именем surname; и то, что вы намеревались, было <xsl:sort select="."/>.

Так правильная форма:

<xsl:apply-templates select="ownersProfile/ownersName/surname"> 
     <xsl:sort select="." /> 
</xsl:apply-templates> 
<br/> 

Кстати, большинство из нас гораздо легче диагностировать «разбора ошибок», если вы сообщите нам, что была ошибка. Говорить, что что-то не удалось, не сказав, как это провалилось, это как рассказать вашему доктору, что вы страдаете, не говоря, где боль.

== по размышлению ... ==

Вы не показали свой источник XML, но думать о том, что имена элементов могут означать, я подозреваю, что есть несколько ownersProfile элементов, каждый из которых имеет один ownersName, который имеет одно или несколько первых имен и одну фамилию, а также другие свойства, такие как адрес электронной почты. В этом случае вы не хотите сортировать фамилии, вы хотите отсортировать профили. Таким образом, это будет примерно так:

<xsl:for-each select="ownersProfile"> 
    <xsl:sort select="ownersName/surname"/> 
    <xsl:apply-templates select="ownersName/firstName"/> 
    <xsl:apply-templates select="ownersName/surname"/> 
    <xsl:apply-templates select="ownersEmail"/><br/> 
    <xsl:apply-templates select="ownersAddress"/><br/> 
    ... 
</xsl:for-each> 

Но я сейчас полностью погружен в область догадок.