设置XML文件 - 使用attr或元素表示多个值

时间:2011-10-21 20:30:36

标签: xml jquery

我正在为我正在创建的网站设置XML文件。 XML文件包含艺术(图像)细节。每个艺术记录可以有多种尺寸(尺寸1,尺寸2等)供购买和多个类别(cat1,cat2,cat3等)。为多个值设置xml文件的最佳方法是什么?以下是我能想到的两个选项。


...使用大小和类别的元素......

<?xml version='1.0' encoding='utf-8' ?>
<images>
    <image id='' ImageName=''>
        <title></title>

        <sizes>
            <size>size1</size>
            <size>size2</size>
        </sizes>

        <categories>
            <category>cat1</category>
            <category>cat2</category>
        </categories>

        <description>
            <short></short>
            <long></long>
        </description>
    </image>
</images>

使用JQuery ajax,我使用以下内容引用每个大小/类别...

$(xml).find('image').each(function(){
    $(this).find('size').each(function(){
        var size = $(this).text();
        {do something here with the size variable}
    });
});

... ... OR


...使用大小和类别的属性......

<?xml version='1.0' encoding='utf-8' ?>
<images>
    <image id='' ImageName='' sizes='size1 size2' category='cat1 cat2 cat3'>
        <title></title>

        <description>
            <short></short>
            <long></long>
        </description>
    </image>
</images>

使用JQuery ajax,我可以使用以下内容引用每个大小/类别...

$(xml).find('image').each(function(){
    $(this).attr('size').split(' ');
        {Loop through each split attribute}
});

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

我会利用xml的内在特性来定义和记录它标记的数据中的关系。

使用元素表示多个值在概念上可以使对象的xml表示更接近模型,而不需要了解域来解释它。

<Image>
    <Sizes>
        <Size sizeName="size1"/>
        <Size sizeName="size2"/>
    </Sizes>
</Image>

这里很清楚,有两种尺寸。

字符串中的空格在xml中没有内在含义

<Image sizes="size1 size2" />

这可能很清楚有两种尺寸,但仅仅是因为你对尺寸的了解。

<Blarg bebos="sldkd eldks" />

这是sldkd eldks的bebos值还是sldkdeldks的两个bebo值? 但...

<Blarg>
    <Bepos>
        <Bepo value="sldkd"/>
        <Bepo value="eldks"/>
    </Bepos>
</Blarg>

您不希望在一年后返回项目,或者选择其他人的代码,目的是添加或更改功能,而不是意识到您必须经过额外的步骤才能使纯数据正常运行。< / p>

答案 1 :(得分:0)

没有单一的“正确”方法,但使用元素当然更灵活,因为您可以在需要时添加子元素。在我看来,当您想要检查给定值是否存在等时,XPath表达式对于元素而言比对于属性更简单。

我还会考虑这些类别是否可能重复。如果是这样,请考虑单独对类别建模并通过id引用它们。这样,例如,可以通过更改单个定义来重命名类别。

答案 2 :(得分:0)

如果要在XML中建模对象的多值属性,则使用子元素更清晰,更易于处理/搜索,更具可扩展性。但是使用空格分隔的属性(微语法的一个简单示例 - 这是您的应用程序而不是XML解析器可以理解的语法)可能更经济/高效。因此,只有在您能够满意地证明机器节省(例如空间和传输时间)确实是必要的并且证明额外的程序员工作量合理时,才使用空格分隔属性方法。