在单个页面上输入一些代码后,经典 ASP 站点中的任何页面都不会加载
在我输入一些代码后开始遇到错误之前,该网站运行正常。该代码不在主页上,但现在不会加载任何网站页面。我在 IIS 中重新启动了该站点,但这没有帮助。
以下是我输入的代码:
'Prepare to parse XML
Set objXML = Server.CreateObject(Microsoft.XMLDOM)
'Set Asynchoronous = false
objXML.async = False
'Load the XML file.
'User Server.MapPath method is the XML is located in your site.
'Else you can use the absolute path.
objXML.Load (Server.MapPath(Products.xml))
'If there is any errors pasring the file the notify
If objXML.parseError.errorCode = 0 Then
'Response.Write(objXML.parseError.reason)
Else objXML.parseError.errorCode <> 0 Then
'Get ALL the Elements by the tag name product
Set products = objXML.getElementsByTagName(product)
Select Case iItemID
Case 1
aParameters = Array(products.item(0).childNodes(0).text, products.item(i).childNodes(2).text, products.item(i).childNodes(2).text)
Case 2
aParameters = Array(products.item(1).childNodes(0).text, products.item(i).childNodes(2).text, products.item(i).childNodes(2).text)
End Select
' Return array containing product info.
GetItemParameters = aParameters
End If
Running IIS in Windows 7 using classic ASP。使用 Notepad++ 进行编辑。
这是 XML 文件:
<configuration>
<products>
<product>
<image>
<![CDATA[ /Images/Atlas Gloves.jpg ]]>
</image>
<name>
<![CDATA[ Atlas Nitrile Touch Gloves ]]>
</name>
<description>
<![CDATA[ Atlas Nitrile Touch is available in 6 vibrant colors, and is America’s #1 glove for the Lawn and Garden market. Atlas gloves have a breathable nylon back and are machine washable. Like a “second skin,” these gloves are the most comfortable! Atlas Nitrile gloves are the #1 gardening gloves. Atlas Nitrile gloves act like a "second skin" between the user and their work, offering full dexterity and grip. Atlas Nitrile Gloves are perfect for gardening, but their uses expand to so many places – the woodshop, the workshop, the workplace. ]]>
</description>
<size>
<![CDATA[ Small, Medium ]]>
</size>
<color>
<![CDATA[ Purple, Pink, Green, Orange ]]>
</color>
</product>
</products>
</configuration>
This site was working properly before I started encountering an error after entering some code. The code was not on the home page but none of the site pages will load now. I restarted the site in IIS and that did not help.
Here is the code that I entered:
'Prepare to parse XML
Set objXML = Server.CreateObject(Microsoft.XMLDOM)
'Set Asynchoronous = false
objXML.async = False
'Load the XML file.
'User Server.MapPath method is the XML is located in your site.
'Else you can use the absolute path.
objXML.Load (Server.MapPath(Products.xml))
'If there is any errors pasring the file the notify
If objXML.parseError.errorCode = 0 Then
'Response.Write(objXML.parseError.reason)
Else objXML.parseError.errorCode <> 0 Then
'Get ALL the Elements by the tag name product
Set products = objXML.getElementsByTagName(product)
Select Case iItemID
Case 1
aParameters = Array(products.item(0).childNodes(0).text, products.item(i).childNodes(2).text, products.item(i).childNodes(2).text)
Case 2
aParameters = Array(products.item(1).childNodes(0).text, products.item(i).childNodes(2).text, products.item(i).childNodes(2).text)
End Select
' Return array containing product info.
GetItemParameters = aParameters
End If
Running IIS in Windows 7 using classic ASP. Editing with Notepad++.
Here is the XML file:
<configuration>
<products>
<product>
<image>
<![CDATA[ /Images/Atlas Gloves.jpg ]]>
</image>
<name>
<![CDATA[ Atlas Nitrile Touch Gloves ]]>
</name>
<description>
<![CDATA[ Atlas Nitrile Touch is available in 6 vibrant colors, and is America’s #1 glove for the Lawn and Garden market. Atlas gloves have a breathable nylon back and are machine washable. Like a “second skin,” these gloves are the most comfortable! Atlas Nitrile gloves are the #1 gardening gloves. Atlas Nitrile gloves act like a "second skin" between the user and their work, offering full dexterity and grip. Atlas Nitrile Gloves are perfect for gardening, but their uses expand to so many places – the woodshop, the workshop, the workplace. ]]>
</description>
<size>
<![CDATA[ Small, Medium ]]>
</size>
<color>
<![CDATA[ Purple, Pink, Green, Orange ]]>
</color>
</product>
</products>
</configuration>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
让我们首先按顺序获取代码:
首先,我们将创建一个小辅助函数,它给定一个父 XML 元素和一个 XPath(可以只是子元素的 tagName),该函数将返回元素的文本值。在本例中,如果未找到该元素,我特意选择返回 null,但如果您愿意,也可以将返回值保留为空:
现在我们将创建一个小型 VBScript 类,其中每个产品元素都有一个字段。此类有一个
LoadFromXml
方法,给定产品 xml 元素将提取字段值。最后,我们创建一个
GetProduct
函数,给定产品索引,将加载返回一个Product
类实例,其中加载了适当的产品详细信息。请注意,使用命名元素消除了对“幻数”的需要,“幻数”的值要么必须记住,要么放在常量中,并且非常脆弱。还使用 XPath 作为选择语言和更具体的 ProgID。总而言之,更加强大,并且在这种情况下也可以工作。
如果您的产品 xml 在应用程序的生命周期内保持相当静态,请考虑以下变化:
这会将 XML DOM 加载到应用程序商店中,从而节省每次需要产品时重新加载的成本。
我建议的另一项更改是,为了检索产品元素而依赖了解产品元素的顺序位置是非常脆弱的。考虑向产品元素添加
id="1"
属性。然后可以通过以下方式检索它:Lets start by getting the code in order:
First we'll create a little helper function which given a parent XML element and an XPath (can be simply a tagName of a child element) will return the text value of an element. In this case I have deliberately choosen to return null if the element isn't found but you could leave the return value empty if you prefer:
Now we'll create a little VBScript class which has a field for each of the product elements. This class has a
LoadFromXml
method which given an product xml element will extract the field values.Finally we create a
GetProduct
function that given the index of a product will load return aProduct
class instance loaded with the appropriate product details.Note the use named elements eliminates the need for "magic numbers" the values of which you would either have to remember or place in constants and are very fragile. Also the use of XPath as the selection language and a more specific ProgID. All in all much more robust and in this case also working.
If your products xml remains fairly static over the life time of the application consider this variation of:
This loads the XML DOM into the application store saving the cost of reloading every time a product is needed.
One other change I would recommend, the reliance of know the ordinal position of a product element in order to retrieve it is quite fragile. Consider adding an
id="1"
attribute to the product element. It can then be retrieved with: