1

行。我有一个文件 application.proj ,它看起来像......

<?xml version="1.0"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="PreBuild;Build;PostBuild;Deploy;PostDeploy;Test" >

    <PropertyGroup>
        <ApplicationName>application</ApplicationName>
        <SolutionPath>C:\Projects\application\Solution\application.sln</SolutionPath>
    </PropertyGroup>

    <Import Project="$(SolutionPath)\SharedBuild.properties"/>
    <Import Project="$(ApplicationName).properties"/>
</Project>

每个包含的项目也可以包括无限的项目。所以我想要一些方法来深入研究并获得每个文件的实际路径。

我可以在 XSL 中执行此操作,还是需要恢复为 C# 或其他方式?

谢谢。

4

1 回答 1

1

根.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Project>  
  <PropertyGroup>
    <ApplicationName>application</ApplicationName>
  </PropertyGroup>

  <Import Project="project1.xml"/>
  <Import Project="project2.xml"/>
</Project>

项目1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Project>  
  <PropertyGroup>
    <ApplicationName>project1</ApplicationName>
  </PropertyGroup>
  <Import Project="project3.xml"/>
</Project>

项目2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Project>  
  <PropertyGroup>
    <ApplicationName>project2</ApplicationName>
  </PropertyGroup>
</Project>

项目3.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Project>  
  <PropertyGroup>
    <ApplicationName>project3</ApplicationName>
  </PropertyGroup>
</Project>

那么这可能是那种事情?

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  version="2.0">

  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

  <xsl:template match="/">
    <projects>
      <!--<xsl:sequence select="test:project(document-uri(.), /Project)" />-->
      <xsl:apply-templates select="/Project">
        <xsl:with-param name="cur-path" select="document-uri(.)" />
      </xsl:apply-templates>
    </projects>
  </xsl:template>

  <xsl:template match="Project">
    <xsl:param name="cur-path" as="xs:anyURI" />
    <project path="{$cur-path}">
      <name><xsl:value-of select="//ApplicationName" /></name>
    </project>
    <xsl:for-each select="//Import">
      <xsl:variable name="path" select="resolve-uri(@Project, $cur-path)" />
      <xsl:apply-templates select="document(@Project)/Project">
        <xsl:with-param name="cur-path" select="$path" />
      </xsl:apply-templates>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

针对 root.xml 运行给出:

<?xml version="1.0" encoding="UTF-8"?>
<projects xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:test="urn:test">
   <project path="file:/C:/Dropbox/Public/xsl/recursive/root.xml">
      <name>application</name>
   </project>
   <project path="file:/C:/Dropbox/Public/xsl/recursive/project1.xml">
      <name>project1</name>
   </project>
   <project path="file:/C:/Dropbox/Public/xsl/recursive/project3.xml">
      <name>project3</name>
   </project>
   <project path="file:/C:/Dropbox/Public/xsl/recursive/project2.xml">
      <name>project2</name>
   </project>
</projects>
于 2012-11-13T09:15:20.503 回答