Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
重构XML文件_Xml_Structure - Fatal编程技术网

重构XML文件

重构XML文件,xml,structure,Xml,Structure,我有一个客户,他希望在他的登记表中添加下拉列表,按国家代码列出世界上所有省份。为此,他给了我。不幸的是,数据的结构无法满足我的需要。下面是我想要的结构。是否有某种方法可以自动重新构造数据,可以使用XSLT或类似的方法?谢谢 <countries> <country code="US"> <region>Alaska</region> <region>California</region> </c

我有一个客户,他希望在他的登记表中添加下拉列表,按国家代码列出世界上所有省份。为此,他给了我。不幸的是,数据的结构无法满足我的需要。下面是我想要的结构。是否有某种方法可以自动重新构造数据,可以使用XSLT或类似的方法?谢谢

<countries>
  <country code="US">
    <region>Alaska</region>
    <region>California</region>
  </country>
</countries>

阿拉斯加州
加利福尼亚

如果必须转换该文件,我只需编写一个快速助手控制台应用程序,将当前文件反序列化为与当前格式对应的对象,然后运行一个循环,将数据放入与上述新格式对应的新对象继承机制中,然后将其序列化回XML


这样,如果我必须再次导入相同的文件,我可以重新运行我的转换应用程序。

如果我必须转换该文件,我只需编写一个快速助手控制台应用程序,将当前文件反序列化为与当前格式对应的对象,然后只需运行一个循环,将数据放入与上述新格式对应的新对象继承机制中,然后将其序列化回XML


这样,如果我必须再次导入相同的文件,我可以重新运行我的转换应用程序。

也许这可以帮助你


也许这对你有帮助


您可以使用喜爱的正则表达式工具来转换文件。例如,在.NET中,您可以使用:

string result = Regex.Replace(Regex.Replace(input, "<(..)>", "<country code=\"$1\">"), "</..>", "</country>");
string result=Regex.Replace(Regex.Replace(输入,“,”),“,”);
$1表示第一个匹配组“(..”匹配的字符串

这是你的


有关详细信息,请参阅网站regular-expressions.info。

您可以使用喜爱的正则表达式工具转换文件。例如,在.NET中,您可以使用:

string result = Regex.Replace(Regex.Replace(input, "<(..)>", "<country code=\"$1\">"), "</..>", "</country>");
string result=Regex.Replace(Regex.Replace(输入,“,”),“,”);
$1表示第一个匹配组“(..”匹配的字符串

这是你的


有关详细信息,请参阅网站regular-expressions.info。

我的XSLT fu无法胜任,但可以使用XSLT

实际上,您只想做一件聪明的事情,那就是将国家代码标记转换为标记

迭代特定节点的子节点列表非常简单,您可以获得当前节点的标记名,并且可以或多或少地输出您想要的任何内容。。。我不确定(这不是我必须做的任何事情)的地方是提取节点名称的确切咒语

编辑:一个太好的问题,不能放弃(学习机会)

当然,答案中缺少的一点是“开”

这就给了你这个(根据我所知道的……我确信区域的副本可以简化,但我不知道如何简化!):



欢迎提出改进建议-将酌情修改

我的XSLT fu无法胜任,但是是的,您可以使用XSLT来完成

实际上,您只想做一件聪明的事情,那就是将国家代码标记转换为标记

迭代特定节点的子节点列表非常简单,您可以获得当前节点的标记名,并且可以或多或少地输出您想要的任何内容。。。我不确定(这不是我必须做的任何事情)的地方是提取节点名称的确切咒语

编辑:一个太好的问题,不能放弃(学习机会)

当然,答案中缺少的一点是“开”

这就给了你这个(根据我所知道的……我确信区域的副本可以简化,但我不知道如何简化!):



欢迎提出改进建议-将酌情修改

这可以通过向XSLT标识转换添加单个模板轻松实现:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="node() | @*">
       <xsl:copy>
          <xsl:apply-templates select="node() | @*" />
       </xsl:copy>
   </xsl:template>

   <xsl:template match="countries/*">
       <country code="{name()}">
          <xsl:apply-templates select="region"/>
       </country>
   </xsl:template>

</xsl:stylesheet>

这可以通过向XSLT标识转换添加单个模板轻松实现:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="node() | @*">
       <xsl:copy>
          <xsl:apply-templates select="node() | @*" />
       </xsl:copy>
   </xsl:template>

   <xsl:template match="countries/*">
       <country code="{name()}">
          <xsl:apply-templates select="region"/>
       </country>
   </xsl:template>

</xsl:stylesheet>


我应该先检查这里的答案(没有收到电子邮件通知),但我设法编写了一个小型ASP/VB程序来实现这一点。谢谢你们的回答!如果我先在这里检查的话,我会节省一些时间。至少我现在有一个可以重用的程序。

我应该先检查这里的答案(没有收到电子邮件通知),但我设法编写了一个小型ASP/VB程序来实现这一点。谢谢你们的回答!如果我先在这里检查的话,我会节省一些时间。至少我现在有一个可以重用的程序。

谢谢Murph和Robert!我将键入这段代码,以备将来需要。谢谢Murph和Robert!我将键入此代码段,以备将来需要。