Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt 将web表单数据映射到重复的XML元素_Xslt_Webforms_Xml Parsing_Xsd_Xml Serialization - Fatal编程技术网

Xslt 将web表单数据映射到重复的XML元素

Xslt 将web表单数据映射到重复的XML元素,xslt,webforms,xml-parsing,xsd,xml-serialization,Xslt,Webforms,Xml Parsing,Xsd,Xml Serialization,我在网上到处寻找答案,但在任何地方都找不到 我正在尝试构建一个web表单,它使用XSLT生成XML数据。我基于做同样事情的其他形式,并且已经让小的测试结构很好地工作。然而,当我试图将它映射到重复的元素时,我遇到了各种各样的问题 下面是我所拥有的内容的简要概述。我有一个与此类似的XSLT文件(免责声明:为简洁起见,排除了行;此外,这些不是实际的字段名): 我还有一个关联的模式,如下所示: <xs:element name="Name" /> <xs:element name=

我在网上到处寻找答案,但在任何地方都找不到

我正在尝试构建一个web表单,它使用
XSLT
生成
XML
数据。我基于做同样事情的其他形式,并且已经让小的测试结构很好地工作。然而,当我试图将它映射到重复的元素时,我遇到了各种各样的问题

下面是我所拥有的内容的简要概述。我有一个与此类似的
XSLT
文件(免责声明:为简洁起见,排除了行;此外,这些不是实际的字段名):


我还有一个关联的模式,如下所示:

<xs:element name="Name" />
<xs:element name="Address" />
<xs:element name="Plan" maxOccurs="10">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Step" />
            <xs:element name="Description" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
<input type="text" id="getName" xpath="/*[local-name()='Name']">
<input type="text" id="getAddress" xpath="/*[local-name()='Address']">
<table>
    <tr><th>Step</th><th>Description</th></tr>
    <tr>
        <td><input type="text" id="getStep1" xpath="/*[local-name()='Plan']/*[local-name()='Step']"></td>
        <td><input type="text" id="getDesc1" xpath="/*[local-name()='Plan']/*[local-name()='Description']"></td>
    </tr>
</table>

记下计划元素中的“maxOccurs='10'”!这就是我遇到问题的地方

我写了一个表单(同样基于其他工作表单),如下所示:

<xs:element name="Name" />
<xs:element name="Address" />
<xs:element name="Plan" maxOccurs="10">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Step" />
            <xs:element name="Description" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
<input type="text" id="getName" xpath="/*[local-name()='Name']">
<input type="text" id="getAddress" xpath="/*[local-name()='Address']">
<table>
    <tr><th>Step</th><th>Description</th></tr>
    <tr>
        <td><input type="text" id="getStep1" xpath="/*[local-name()='Plan']/*[local-name()='Step']"></td>
        <td><input type="text" id="getDesc1" xpath="/*[local-name()='Plan']/*[local-name()='Description']"></td>
    </tr>
</table>

步骤说明
这很好用;我能够提交数据,它可以根据我的需要创建XML

然而,我的问题是:我正在尝试编写我的设置,以便它最多可以容纳十行(根据maxOccurs设置)。当我尝试这样做时,它将不起作用:

    <tr>
        <td><input type="text" id="getStep1" xpath="/*[local-name()='Plan']/*[local-name()='Step']"></td>
        <td><input type="text" id="getDesc1" xpath="/*[local-name()='Plan']/*[local-name()='Description']"></td>
    </tr>
    <tr>
        <td><input type="text" id="getStep2" xpath="/*[local-name()='Plan']/*[local-name()='Step']"></td>
        <td><input type="text" id="getDesc2" xpath="/*[local-name()='Plan']/*[local-name()='Description']"></td>
    </tr>

这给了我各种各样的问题,取决于我如何调整它。有时,它不保存任何数据(用于步骤和说明);有时,它会为两行保存相同的数据

我还没有找到任何文档来解释它是如何工作的。我调整了
XSLT
HTML
schema
,但都没有效果。这让我很沮丧

有人知道如何解决这个问题吗

注:这与我之前提出的另一个问题直接相关:


提前感谢您的帮助

您需要为每个tr指定您想要的计划元素,即第一个tr需要获得第一个计划,依此类推。 为此,您可以在
[local-name()='Plan']
谓词中使用position()函数,例如:

[local-name()='Plan' and position()=1]
对于第一个tr

[local-name()='Plan' and position()=2]    
对于第二个tr,依此类推

这应该可以让您开始,但您也可以通过循环到输出tr元素来使代码更智能


当您指定节点树(即节点集合)时,问题中的示例XPath将返回所有步骤或描述元素。position功能允许您在节点树中选择单个节点。

以下是我最终实现此功能的方法:

    <tr>
        <td><input type="text" id="getStep1" xpath="/*[local-name()='Plan'][1]/*[local-name()='Step']"></td>
        <td><input type="text" id="getDesc1" xpath="/*[local-name()='Plan'][1]/*[local-name()='Description']"></td>
    </tr>
    <tr>
        <td><input type="text" id="getStep2" xpath="/*[local-name()='Plan'][2]/*[local-name()='Step']"></td>
        <td><input type="text" id="getDesc2" xpath="/*[local-name()='Plan'][2]/*[local-name()='Description']"></td>
    </tr>


如果您查看xpath,请注意“Plan”之后的[1]和[2]。当我将它们包含在xpath中时,它工作起来没有问题。

我将尝试一下,看看会发生什么。Re:循环到输出:这正是我想要的。最大值不是10;实际上是100,我不打算写那么多元素。然而,我想确保在我编程任何循环输出元素之前,我可以首先让它工作。你每天都会学到一些东西,我没有意识到位置可以缩短为数字。是的,我在某处(不记得在哪里)遇到了一个使用这种语法的示例。我试过了,瞧。