使用共享文件名从 XML 批量插入元素 [英] Batch Insert Element from XML with Shared Filename

查看:25
本文介绍了使用共享文件名从 XML 批量插入元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 800 个唯一的 <REMARK>this is a remark</REMARK> 元素插入到现有的 800 个 XML 文件集中.我生成了 800 个文档,其中仅包含我想要插入到每个 XML 中的 <REMARK> 元素.想法是,我可以根据共享文件名将此元素插入到相应的 XML 文档中.例如,我在一个文件夹中有一个名为 WNYC-SCHK-2004-02-20-37540.xml 的 XML,其中只有这些信息 <REMARK>想想西班牙古典音乐和自然会想到 Manuel de Falla 这个名字.</REMARK> 我想将该元素插入到一个名为 WNYC-SCHK-2004-02-20-37540.xml 正下方 元素下方:

I'm trying to insert 800 unique <REMARK>this is a remark</REMARK> elements into an existing set of 800 XML files. I generated 800 documents with only the <REMARK> element I want inserted into each XML. The thought being, I could insert this element into the corresponding XML document, based on a shared filename. For example, I have an XML called WNYC-SCHK-2004-02-20-37540.xml in one folder with only this information in it <REMARK>Think of Spanish classical music and the name Manuel de Falla naturally comes to mind.</REMARK> And I want to insert the element into a file also named WNYC-SCHK-2004-02-20-37540.xml just below the <CHANGETIME> element below:

<?xml version="1.0" encoding="ISO-8859-1"?>
<ENTRIES>
 <ENTRY>
  <NUMBER>622</NUMBER>
  <CLASS>Audio</CLASS>
  <TITLE>WNYC-SCHK-2004-02-20-37540</TITLE>
  <GENERATOR>DBM</GENERATOR>
  <CREATOR>JPASSMOR</CREATOR>
  <DATE>2015-01-06</DATE>
  <DATUM>2015-01-06</DATUM>
  <TIME>11:48:59</TIME>
  <TIMESTAMP>2015-01-06 11:48:59</TIMESTAMP>
  <LENGTH>00:58:53.920</LENGTH>
  <DURATION>3533920</DURATION>
  <SOFTDELETED>0</SOFTDELETED>
  <NODELETE>0</NODELETE>
  <READY>0</READY>
  <PERFECT>0</PERFECT>
  <FORARCHIVE>0</FORARCHIVE>
  <ARCHIVING>0</ARCHIVING>
  <ARCHIVED>0</ARCHIVED>
  <GROWING>0</GROWING>
  <NEW>0</NEW>
  <INVALID>0</INVALID>
  <LOWRESEXISTS>0</LOWRESEXISTS>
  <KEYFRAMEEXISTS>0</KEYFRAMEEXISTS>
  <VSAT>0</VSAT>
  <LOOP>0</LOOP>
  <INVISIBLE>0</INVISIBLE>
  <SHAREDAUDIO>0</SHAREDAUDIO>
  <TRANSMITTED>0</TRANSMITTED>
  <ROYALTIES>0</ROYALTIES>
  <WITHTEXTFILE>0</WITHTEXTFILE>
  <INDEXED>0</INDEXED>
  <PERSONALRADIO>0</PERSONALRADIO>
  <REQUESTDEARCHIVE>0</REQUESTDEARCHIVE>
  <REPLFLAGS>0</REPLFLAGS>
  <STATE>Existing</STATE>
  <AUTHOR>ARCHIVES</AUTHOR>
  <EDITOR>JPASSMOR</EDITOR>
  <CHANGEUSER>JPASSMOR</CHANGEUSER>
  <CHANGEDATE>2015-01-26</CHANGEDATE>
  <CHANGETIME>09:33:07</CHANGETIME>
  <FILESIZE>628255824</FILESIZE>
  <AUDIOFORMAT>Wave,BWF,RIFF</AUDIOFORMAT>
  <AUDIOMODE>Stereo</AUDIOMODE>
  <SAMPLERATE>44100</SAMPLERATE>
  <BITRATE>0</BITRATE>
  <TEXTLENGTH>00:00:00.000</TEXTLENGTH>
  <TEXTDURATION>0</TEXTDURATION>
  <BROADCASTINGS>0</BROADCASTINGS>
  <MARKIN>00:00:00.000</MARKIN>
  <MARKOUT>00:58:53.920</MARKOUT>
 </ENTRY>
</ENTRIES>

看起来像这样

<?xml version="1.0" encoding="ISO-8859-1"?>
    <ENTRIES>
     <ENTRY>
      <NUMBER>622</NUMBER>
      <CLASS>Audio</CLASS>
      <TITLE>WNYC-SCHK-2004-02-20-37540</TITLE>
      <GENERATOR>DBM</GENERATOR>
      <CREATOR>JPASSMOR</CREATOR>
      <DATE>2015-01-06</DATE>
      <DATUM>2015-01-06</DATUM>
      <TIME>11:48:59</TIME>
      <TIMESTAMP>2015-01-06 11:48:59</TIMESTAMP>
      <LENGTH>00:58:53.920</LENGTH>
      <DURATION>3533920</DURATION>
      <SOFTDELETED>0</SOFTDELETED>
      <NODELETE>0</NODELETE>
      <READY>0</READY>
      <PERFECT>0</PERFECT>
      <FORARCHIVE>0</FORARCHIVE>
      <ARCHIVING>0</ARCHIVING>
      <ARCHIVED>0</ARCHIVED>
      <GROWING>0</GROWING>
      <NEW>0</NEW>
      <INVALID>0</INVALID>
      <LOWRESEXISTS>0</LOWRESEXISTS>
      <KEYFRAMEEXISTS>0</KEYFRAMEEXISTS>
      <VSAT>0</VSAT>
      <LOOP>0</LOOP>
      <INVISIBLE>0</INVISIBLE>
      <SHAREDAUDIO>0</SHAREDAUDIO>
      <TRANSMITTED>0</TRANSMITTED>
      <ROYALTIES>0</ROYALTIES>
      <WITHTEXTFILE>0</WITHTEXTFILE>
      <INDEXED>0</INDEXED>
      <PERSONALRADIO>0</PERSONALRADIO>
      <REQUESTDEARCHIVE>0</REQUESTDEARCHIVE>
      <REPLFLAGS>0</REPLFLAGS>
      <STATE>Existing</STATE>
      <AUTHOR>ARCHIVES</AUTHOR>
      <EDITOR>JPASSMOR</EDITOR>
      <CHANGEUSER>JPASSMOR</CHANGEUSER>
      <CHANGEDATE>2015-01-26</CHANGEDATE>
      <CHANGETIME>09:33:07</CHANGETIME>
      <REMARK>Think of Spanish classical music and the name Manuel de Falla naturally comes to mind.</REMARK>
      <FILESIZE>628255824</FILESIZE>
      <AUDIOFORMAT>Wave,BWF,RIFF</AUDIOFORMAT>
      <AUDIOMODE>Stereo</AUDIOMODE>
      <SAMPLERATE>44100</SAMPLERATE>
      <BITRATE>0</BITRATE>
      <TEXTLENGTH>00:00:00.000</TEXTLENGTH>
      <TEXTDURATION>0</TEXTDURATION>
      <BROADCASTINGS>0</BROADCASTINGS>
      <MARKIN>00:00:00.000</MARKIN>
      <MARKOUT>00:58:53.920</MARKOUT>
     </ENTRY>
    </ENTRIES>

我认为可能有一种方法可以使用 xsl 根据批处理中的共享文件名将注释从一个 xml 文档复制到另一个.或者可能有更简单的方法来做到这一点?

I thought that there might be a way to use xsl to copy the remark from one xml doc into the other based on a shared filename in a batch. Or might there be an easier way to do it?

推荐答案

这个问题有一个有趣的方面,所以我用它来测试一种不同的处理文件的方法.

This problem have an interesting aspect, so I used it to test a different method to process files.

@echo off
setlocal EnableDelayedExpansion

rem Process all .xml files in current directory
for %%a in (*.xml) do (

   rem Locate the line numbers where "CHANGETIME" and "/ENTRIES" appears
   set "insertLine="
   for /F "delims=:" %%b in ('findstr /N "CHANGETIME /ENTRIES" "%%a"') do (
      if not defined insertLine (
         set "insertLine=%%b"
      ) else (
         set "lastLine=%%b"
      )
   )

   rem Block used to read-input-file/create-output-file
   < "%%a" (

           rem Read the first line from input file
           set /P "line="

           rem Copy lines up to the insertion point
           for /L %%i in (1,1,!insertLine!) do set /P "line=!line!" & echo/

           rem Insert the corresponding REMARK file
           type "RemarksFolder\%%a"

           rem Copy the rest of lines
           set /A insertLine+=1
           for /L %%i in (!insertLine!,1,!lastLine!) do set /P "line=!line!" & echo/

           ) > "output.tmp"
   rem Block-end

   rem Replace input file with created output file
   move /Y "output.tmp" "%%a" > NUL

)

这个程序应该比其他逐行比较的方法运行得更快;然而,它的缺点是从所有行中删除了前导空格.虽然可能会插入额外的代码来解决这个问题,但这样做会减慢进程...

This program should run faster than other methods that compare line by line; however, it has the disadvantage that leading spaces are removed from all lines. Although additional code may be inserted in order to fix this point, doing that will slow down the process...

这篇关于使用共享文件名从 XML 批量插入元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆