1

ループ内で If ステートメントを使用する代わりに、属性 New="True" を持つ要素のみをループしたいと思います。そんなことがあるものか?(これでパフォーマンスが上がるといいのですが)

ASP:

<%   
Set objXMLDoc = Server.CreateObject("MSXML2.DOMDocument.3.0")    
objXMLDoc.async = False    
objXMLDoc.load Server.MapPath("/data.xml")
Dim xmlProduct       
For Each xmlProduct In objXMLDoc.documentElement.selectNodes("Product")
     Dim productCode : productCode = xmlProduct.selectSingleNode("ProductCode").text   
     Dim productName : productName = xmlProduct.selectSingleNode("ProductName").text   
     Response.Write Server.HTMLEncode(productCode) & " - "
     Response.Write Server.HTMLEncode(productName) & "<br>"   
Next   
%> 

XML:

<Products>
  <Product New="True">
    <ProductCode>1234</ProductCode>
    <ProductName>Bike</ProductName>
  </Product>
  <Product New="False">
    <ProductCode>1235</ProductCode>
    <ProductName>Car</ProductName>
  </Product>
  <Product New="True">
    <ProductCode>1236</ProductCode>
    <ProductName>Plane</ProductName>
  </Product>
</Products>
4

1 に答える 1

2

XPATH を使用して、XML ドキュメントのクエリとフィルター処理を行うことができます。

Dim xpath : xpath = "/*/Product[@New='True']"

Dim xml
Set xml = CreateObject("Msxml2.DOMDocument")
    xml.async = False
    xml.loadXML([YOUR XML STRING])

    Dim root, xmlNodes, x
    Set root = xml.documentElement
        set xmlNodes = xml.selectNodes(xpath)
            If xmlNodes.length > 0 then
                For each x in xmlNodes
                    response.write(x.text)
                Next
            Else
                response.write("not found.")
            End if
        set xmlNodes = nothing
    Set root = Nothing

Set xml = Nothing

XML 構造でこの xpath をテストしましたが、うまくいくようです。xpath 構文の詳細については、こちらを参照してください。

HTH、エリック

于 2013-08-02T12:10:59.047 に答える