我正在尝试编写一个 XSLT 文件,该文件将处理一个 Android Activity 布局 xml 文件并创建一个等效的 HTML。
在创建/测试 xslt 文件时,我使用的是eclipse xslt工具。
此路径上的障碍之一是许多值不是直接保存在 Android 布局文件中(例如字符串/文本值),而是保存在位于“values”文件夹中的单独 xml 文件中
我一直在尝试使用 xslt 函数 'document' 打开 strings.xml 文件,但没有成功。
Q) 是否需要启用任何 Eclipse 权限才能使 xslt 文档功能运行?
Q) 我对文档功能应该如何运作的理解是否有遗漏?
尝试访问 android strings.xml 文件的TextView模板(在 xslt 文件中)中包含的行是:
<xsl:value-of select="document('../values/strings.xml')/String[@name=substring-after(@android:text,'/')]" />
- 布局文件位于 res/layout 文件夹中
- xslt 位于 res/xsl 文件夹中。
- strings.xml 文件位于 res/values 文件夹中
以下是代码示例:
Android XML 布局片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- This is the full screen vertical layout -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="vertical" >
<!-- This is the main content vertical layout -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="@dimen/mainHeadingIndent" >
<!-- This is the Status Section Vertical content layout -->
<TextView
style="@style/HeadingTextStyle"
android:id="@+id/textView2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight=".5"
android:text="@string/Status"/>
**The rest of the layout file is intentionally omitted**
这是 XSLT 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:android="http://schemas.android.com/apk/res/android">
<xsl:output method="html" version="4.0" encoding="iso-8859-1"
indent="yes" />
<xsl:template match="/">
<html>
<head>
</head>
<body>
<xsl:for-each select="LinearLayout">
<xsl:call-template name="LinearLayout">
</xsl:call-template>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template name="LinearLayout">
<xsl:variable name="width">
<xsl:value-of select="@android:layout_width" />
</xsl:variable>
<xsl:variable name="height">
<xsl:value-of select="@android:layout_height" />
</xsl:variable>
<xsl:variable name="margin">
<xsl:value-of select="@android:layout_margin" />
</xsl:variable>
<xsl:variable name="orient">
<xsl:value-of select="@android:orientation" />
</xsl:variable>
<xsl:variable name="pos">
<xsl:number value="position()" format="1" />
</xsl:variable>
<div div_pos='{$pos}' Width='{$width}' Height='{$height}' Margin='{$margin}'
Orient='{$orient}'>
<xsl:for-each select="LinearLayout">
<xsl:call-template name="LinearLayout">
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="TextView">
<xsl:call-template name="TextView">
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="ImageButton">
<xsl:call-template name="ImageButton">
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="Spinner">
<xsl:call-template name="Spinner">
</xsl:call-template>
</xsl:for-each>
<xsl:for-each select="Button">
<xsl:call-template name="Button">
</xsl:call-template>
</xsl:for-each>
</div>
</xsl:template>
<xsl:template name="ImageButton">
<div id="{@android:id}">
<xsl:comment>
ImageButton
</xsl:comment>
</div>
</xsl:template>
<xsl:template name="TextView">
<xsl:variable name="pos">
<xsl:number value="position()" format="1" />
</xsl:variable>
Text field =
<xsl:value-of select="@android:text" />
<xsl:variable name="txt">
<xsl:choose>
<xsl:when test="contains(@android:text,'/')">
<xsl:value-of select="document('../values/strings.xml')/String[@name=substring-after(@android:text,'/')]" />
<!--
<xsl:value-of select="substring-after(@android:text,'/')" />
-->
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@android:text" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<div id="{@android:id}">
<xsl:comment>
TextView Element
</xsl:comment>
<p>
Text pointer is: <xsl:value-of select="$txt" />
</p>
<!-- <p>Text pointer is:<xsl:copy-of select="$txt"/></p> <xsl:value-of
select="document('../values/strings.xml')/String[@name=$txt]" />
<xsl:value-of select="substring-after(@android:text,'/')" />
-->
</div>
endoftext
<br />
</xsl:template>
<xsl:template name="Spinner">
<div id="{@android:id}">
<xsl:comment>
Spinner
</xsl:comment>
</div>
</xsl:template>
<xsl:template name="Button">
<div id="{@android:id}">
<xsl:comment>
Button
</xsl:comment>
</div>
</xsl:template>
</xsl:stylesheet>