0
請您幫助並建議如何將節點插入到我的XML文件中,從而使此節點具有以下內部值:差異當前節點和前一個節點之間(只有一個先前的數據)。如何找到當前節點(n)和前一個節點(n-1)的差異
我輸入XML是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>1</TestParameter>
<OriIndex>0</OriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>1</OriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>3</TestFlow>
<TestParameter>1</TestParameter>
<OriIndex>2</OriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>2</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>3</OriIndex>
</Test>
<Test>
<TestPhase>2</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>1</TestParameter>
<OriIndex>4</OriIndex>
</Test>
.
.
.
.
.
我的XSLT是:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding = "UTF-8" indent="yes" omit-xml-declaration="no" standalone="yes" />
<xsl:template match="Root">
<xsl:copy>
<xsl:apply-templates select="Test">
<xsl:sort select="TestPhase" data-type="number" order="ascending"/>
<xsl:sort select="TestFlow" data-type="number" order="ascending"/>
<xsl:sort select="TestParameter" data-type="number" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Test">
<xsl:copy>
<xsl:apply-templates select="@* | *"/>
<SortedIndex><xsl:value-of select="position() - 1"/></SortedIndex>
<DiffSortedIndex><xsl:value-of select="position() - 1 - OriIndex" /></DiffSortedIndex>
<DiffOriIndex><xsl:value-of select="OriIndex - preceding-sibling::Test[position()-1]/OriIndex" /></DiffOriIndex>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我的輸出XML是:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>1</TestParameter>
<OriIndex>0</OriIndex>
<SortedIndex>0</SortedIndex>
<DiffSortedIndex>0</DiffSortedIndex>
<DiffOriIndex>NaN</DiffOriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>1</OriIndex>
<SortedIndex>1</SortedIndex>
<DiffSortedIndex>0</DiffSortedIndex>
<DiffOriIndex>NaN</DiffOriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>2</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>3</OriIndex>
<SortedIndex>2</SortedIndex>
<DiffSortedIndex>-1</DiffSortedIndex>
<DiffOriIndex>NaN</DiffOriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>2</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>12</OriIndex>
<SortedIndex>3</SortedIndex>
<DiffSortedIndex>-9</DiffSortedIndex>
<DiffOriIndex>NaN</DiffOriIndex>
</Test>
.
.
.
.
.
我的預期成果是:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>1</TestParameter>
<OriIndex>0</OriIndex>
<SortedIndex>0</SortedIndex>
<DiffSortedIndex>0</DiffSortedIndex>
<DiffOriIndex>NaN</DiffOriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>1</OriIndex>
<SortedIndex>1</SortedIndex>
<DiffSortedIndex>0</DiffSortedIndex>
<DiffOriIndex>1</DiffOriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>2</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>3</OriIndex>
<SortedIndex>2</SortedIndex>
<DiffSortedIndex>-1</DiffSortedIndex>
<DiffOriIndex>2</DiffOriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>2</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>12</OriIndex>
<SortedIndex>3</SortedIndex>
<DiffSortedIndex>-9</DiffSortedIndex>
<DiffOriIndex>9</DiffOriIndex>
</Test>
<Test>
<TestPhase>1</TestPhase>
<TestFlow>3</TestFlow>
<TestParameter>1</TestParameter>
<OriIndex>2</OriIndex>
<SortedIndex>4</SortedIndex>
<DiffSortedIndex>2</DiffSortedIndex>
<DiffOriIndex>-10</DiffOriIndex>
</Test>
<Test>
<TestPhase>2</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>1</TestParameter>
<OriIndex>4</OriIndex>
<SortedIndex>5</SortedIndex>
<DiffSortedIndex>1</DiffSortedIndex>
<DiffOriIndex>2</DiffOriIndex>
</Test>
<Test>
<TestPhase>2</TestPhase>
<TestFlow>1</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>5</OriIndex>
<SortedIndex>6</SortedIndex>
<DiffSortedIndex>1</DiffSortedIndex>
<DiffOriIndex>1</DiffOriIndex>
</Test>
<Test>
<TestPhase>2</TestPhase>
<TestFlow>2</TestFlow>
<TestParameter>1</TestParameter>
<OriIndex>6</OriIndex>
<SortedIndex>7</SortedIndex>
<DiffSortedIndex>1</DiffSortedIndex>
<DiffOriIndex>1</DiffOriIndex>
</Test>
<Test>
<TestPhase>2</TestPhase>
<TestFlow>2</TestFlow>
<TestParameter>2</TestParameter>
<OriIndex>7</OriIndex>
<SortedIndex>8</SortedIndex>
<DiffSortedIndex>1</DiffSortedIndex>
<DiffOriIndex>1</DiffOriIndex>
</Test>
.
.
.
.
.
我無法得到正確的1部分。預期的內部值= OriIndex(當前位置) - OriIndex(前一位置)或OriIndex(位置n) - OriIndex(位置n-1)。
請幫我解決這個問題。 您的努力非常感謝。
非常感謝。
乾杯!
謝謝jdweng。我無法使用Linq,因爲需求是.NET2.0。這就是我選擇使用XSLT和Xpath的原因。非常感謝你。 – newbuntu
謝謝女士們,先生們。該解決方案可見[鏈接] https://stackoverflow.com/questions/46430620/how-to-get-the-difference-between-previous-and-current-node-inner-text-value/46431919?noredirect= 1#comment79864370_46431919。你們都很有幫助。謝謝,乾杯! – newbuntu