2009-09-16 4 views
2
проблему

XML, который получил меня в тупик, но, вероятно, очень просто ...XML SelectNodes используя классический ASP

XML-это как:

<header> 
    <createdOn>16 Sep 2009</createdOn> 
    <createdBy>Jez</createdBy> 
</header> 
<agents> 
    <agent> 
      <agentDetails> 
        <agentName>text</agentName> 
        <agentTelephone>text</agentTelephone> 
      </agentDetails> 
      <properties> 
        <property> 
          <propertyid>number</propertyid> 
          <address> 
            <number>1</number> 
            <street>High St</street> 
            <postcode></postcode> 
            <country>UK</country> 
          </address> 
          <price> 
            <category>text</category> 
            <price>number</price> 
            <reference>text</reference> 
          </price> 
          <description> 
            <propertyType>House</propertyType> 
            <bedrooms>2</bedrooms> 
            <bathrooms>1</bathrooms> 
            <sleeps> 
            <briefDescription>text</briefDescription> 
            <addDescription>long-text</addDescription> 
            <floorSize> 
              <size>80</size> 
              <type>sq. mt</type> 
            </floorSize> 
            <bullets> 
              <bullet>No Of Bedrooms : 2</bullet> 
              <bullet>Condition : Habitable</bullet> 
              <bullet>Land Size (M2): 2,000</bullet> 
            </bullets> 
          </description> 
          <images> 
            <image> 
              <thumbnail>URL</thumbnail> 
              <image>URL</image> 
              <alttext></alttext> 
            </image> 
            <image> 
              <thumbnail>URL</thumbnail> 
              <image>URL</image> 
              <alttext></alttext> 
            </image> 
          </images> 
          <links> 
            <link> 
              <type>text</type> 
              <url>url</url> 
            </link> 
            <link> 
              <type>text</type> 
              <url>url</url> 
            </link> 
          </links> 
        </property> 
      </properties> 
    </agent> 
</agents> 

И код, который я хотел бы использовать является:

Set NodeList = objXML.documentElement.selectNodes("agents/agent/properties/property") 
For Each Node In NodeList 
    'I want to be able to extract distinct fields here... 
    response.write Node.selectSingleNode("address/street") & "<br/>" 
    response.write Node.selectSingleNode("description/briefDescription") & "<br/>" 
Next 

Но, я не знаю как.

Кроме того, это может быть проблемой, например, с <images> и <links> тегами.

Предложения, пожалуйста?

+0

@Jez: Вы можете рассмотреть возможность использования XSLT для такого рода задач. Взятие XML и выплевывание HTML - это то, что хорошо. Занимает немного головы, но полученный код намного чище и быстрее, чем эквивалентный код VBScript. – AnthonyWJones

+0

Я согласен с Энтони. Раньше я использовал XSLT, но в этом случае я не пытаюсь отображать информацию, я хочу схему XML. Я пытаюсь создать функцию для сопоставления любых файлов XML в SQL. – JezB

ответ

2

Во-первых, приведенный выше пример XML недействителен. Он не имеет корневого элемента (или имеет несколько корневых элементов, в зависимости от вашей точки зрения). Кроме того, элемент <sleeps> никогда не закрывается. Я думаю, что это могут быть опечатки в вашем примере?

Я не уверен, что вы подразумеваете под «Я хочу, чтобы иметь возможность извлекать отдельные поля здесь». Можете ли вы привести пример вывода, который вы используете?

Без дополнительной информации, я могу предположить, пытаясь некоторые вариации этого:

Dim NodeList, Node, SubNode 
'' # Note: Replace [root] with your actual root level element 
Set NodeList = objXML.documentElement.selectNodes("/[root]/agents/agent/properties/property") 
For Each Node In NodeList 
    '' # Do something useful... ?? Distinct fields?? 
    Set Node = Node.selectSingleNode("address/street/text()") 
    If Not Node Is Nothing Then 
     Response.Write Server.HTMLEncode(Node.nodeValue) & "<br />" 
    End If 
Next 

Поможет ли это?

+0

Это фантастический Крис! Это способ ссылки на узлы, которые я очень ошибался - ваш примерный код помог. Спасибо! (BTW - да, это опечатка в этом примере. У документа есть корень, но для этого он был упрощен.) – JezB

+0

+1. Не только потому, что он правильный, а потому, что он использует Server.HTMLEncode, если бы у меня была копейка за каждый раз, когда я видел, что она отсутствует в коде. – AnthonyWJones

3

код я использую:

Set NodeList = objXML.documentElement.selectNodes("agents/agent/properties/property") 
For Each Node In NodeList 
    Set AddrNode = Node.selectSingleNode("address/street/text()") 
    if not AddrNode Is Nothing then response.write AddrNode.nodeValue & "<br/>" 
    set AddrNode = nothing 

    Set AddrNode = Node.selectSingleNode("address/region/text()") 
    if not AddrNode Is Nothing then response.write AddrNode.nodeValue & "<br/>" 
    set AddrNode = nothing 

    For Each ImgNode In Node.selectNodes("images/image") 
     Set ThNode = ImgNode.selectSingleNode("thumbnail/text()") 
     if not ThNode Is Nothing then response.write ThNode.nodeValue & "<br/>" 
     set ThNode = nothing 
     Set ThNode = ImgNode.selectSingleNode("image/text()") 
     if not ThNode Is Nothing then response.write ThNode.nodeValue & "<br/>" 
     set ThNode = nothing 
     Set ThNode = ImgNode.selectSingleNode("alttext/text()") 
     if not ThNode Is Nothing then response.write ThNode.nodeValue & "<br/>" 
     set ThNode = nothing 
    next 
Next 

Я надеюсь, что кто-то считает его полезным!

+0

Я сделал. Благодарю. В настоящее время используется Classic ASP для использования данных из Amazon Web Services. В частности, поиск продукта. –

Смежные вопросы