Как я могу найти файл XML без динамического языка? - PullRequest
1 голос
/ 14 января 2011

Позвольте мне попытаться объяснить мою ситуацию:

Мы используем CMS, которая «запекает» веб-сайт, а вы публикуете его на веб-сервере. Опубликованный сайт содержит только статические HTML (или XML) страницы (сгенерированные из содержимого в базе данных CMS).

Я импортировал файл XML с именами и номерами телефонов из телефонного справочника компании.

Используя только XSLT, я могу создать способ поиска в этом каталоге?

Например, если мой XML-файл, directory.xml выглядит так:

<directory>
<person>
 <fname>Ryan</fname>
 <lname>Purple</lname>
  <phone>887 778 5544</phone>
</person>
<person>
  <fname>Tanya</fname>
  <lname>Orange</lname>
  <phone>887 998 5541</phone>
</person>
<directory>

Могу ли я создать способ поиска человека с фамилией, начинающейся с "Pur"?

  1. Могу ли я передать параметр в XSLT?

  2. Можно ли выполнить поиск в дереве XML, чтобы найти строку в параметре?

Ответы [ 2 ]

2 голосов
/ 14 января 2011

Используя только XSLT, я могу создать способ искать в этом каталоге?

Да.

Могу ли я создать способ поиска человек с фамилией начинающий с "Pur"?

Да. Фактически приведенное ниже преобразование позволяет искать текст, начиная с любых 2,3,4 или 5 символов. Его можно обобщить, чтобы разрешить поиск начальной строки вплоть до любой предопределенной максимальной длины.

1.Могу ли я передать параметр в XSLT?

Да . Детали того, как это сделать, зависят от конкретного используемого процессора XSLT. Например, здесь - это способ передачи внешних параметров в .NET XslCompiledTransform.Transform()

2.Могу ли я найти дерево XML, чтобы найти строку в параметре?

Да. Это преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:param name="pPattern" select="'Pur'"/>

 <xsl:key name="kPersonByLNameStart"
  match="person"  use="substring(lname,1,2)"/>
 <xsl:key name="kPersonByLNameStart"
  match="person"  use="substring(lname,1,3)"/>
 <xsl:key name="kPersonByLNameStart"
  match="person"  use="substring(lname,1,4)"/>
 <xsl:key name="kPersonByLNameStart"
  match="person"  use="substring(lname,1,5)"/>

 <xsl:template match="/">
  <results>
   <xsl:copy-of select=
    "key('kPersonByLNameStart', $pPattern)"/>
  </results>
 </xsl:template>
</xsl:stylesheet>

при применении к этому документу XML (предоставленный документ XML - исправлен, чтобы быть правильно сформированным и расширенным):

<directory>
    <person>
        <fname>Ryan</fname>
        <lname>Purple</lname>
        <phone>887 778 5544</phone>
    </person>
    <person>
        <fname>Tanya</fname>
        <lname>Orange</lname>
        <phone>887 998 5541</phone>
    </person>
    <person>
        <fname>Martin</fname>
        <lname>Purr</lname>
        <phone>887 778 5544</phone>
    </person>
</directory>

дает желаемые, правильные результаты и наиболее эффективным способом :

<results>
   <person>
      <fname>Ryan</fname>
      <lname>Purple</lname>
      <phone>887 778 5544</phone>
   </person>
   <person>
      <fname>Martin</fname>
      <lname>Purr</lname>
      <phone>887 778 5544</phone>
   </person>
</results>

Do Note :

Этот код показывает, как эффективно осуществлять поиск текста, имеющего некоторый префикс длины 2, 3, 4 или 5.

0 голосов
/ 14 января 2011

Как насчет AJAX? Это должно работать без помощи сервера и отлично прочитает ваш xml. W3Schools имеет хорошее вступление.

Отредактировано: Бла, извините, это бесполезно .. Я забыл, что даже здесь вам нужно использовать серверный скрипт: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...