Я хочу, чтобы отформатировать мои заметки об учебе, взять входной файл и вывести чистый HTML-файл. Сегодня я научил себя базовому XML и XSTL (и имел предварительные знания HTML и CSS) для достижения этого. Так что я бы простой XML-файл с содержанием ноты, например, следующее:Использование XML и XSLT для форматирования моих заметок
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<root>
<heading>Programming Fundamentals 48023</heading>
<section>
<subheading>Classes and Objects</subheading>
<point>Something about classes</point>
<point>Some else about classes</point>
<codeBlock>
<text>How to create an instance of a class</text>
<code>Class class = new Class();</code>
</codeBlock>
<point>Something about objects</point>
. . .
</section>
<section>
<subheading>Methods</subheading>
<point>Something about methods</point>
<codeBlock>
<text>How to define a method</text>
<code>modifiers returnType methodName() { . . . }</code>
</codeBlock>
. . .
</section>
. . .
</root>
документ XML должен разделить мои заметки в abitrary количество секций, каждый из которых имеет подзаголовок, и произвольное число точки точек и точек с разными форматами блоков кода.
Затем для форматирования документа XML, есть таблицы стилей XSLT (с HTML и CSS и такие), который выглядит примерно так:
<?xsl version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="root/heading" /></title>
<style>
body {font-family:Tahoma; }
div {width:800px; margin-left:auto; margin-right:auto; }
h1 {color:#6FA5FD; border-bottom: 1px dotted #333333; text-indent:64px; }
h2 {color:#6FA5FD; border-bottom: 1px dotted #333333; text-indent:96px; }
pre {width:640px; border-style:dotted; border-width:1px; border-color:#333333; background-color:#CCCCFF; }
ul {list-style-type:square; color:#6FA5FD; }
li span {color:#000000; font-size:10; }
</style>
</head>
<body>
<div>
<!-- - - - - - - - - CONTENT STARTS HERE - - - - - - - - -->
<h1><xsl:value-of select="root/heading" /></h1>
<xsl:for-each select="root/section">
<h2><xsl:value-of select="subheading" /></h2>
<xsl:for-each select="point">
<ul>
<li><span>
<xsl:value-of select="." />
</span></li>
</ul>
</xsl:for-each>
<xsl:for-each select="codeBlock">
<ul>
<li><span> <xsl:value-of select="./text" />
<pre> <xsl:value-of select="./code" /> </pre>
</span></li>
</ul>
</xsl:for-each>
</xsl:for-each>
<!-- - - - - - - - - CONTENT ENDS HERE - - - - - - - - -->
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Таким образом, XML элемент становится отформатированный HTML элемент, то XML элемент становится форматированным элементом HTML. Отлично. Затем тег XML группирует точки точек и кодовые блоки, и поэтому точки точки просто становятся элементами списка с синими марками и черным текстом, а блоки кода отформатированы в HTML-элементе.
У меня возникают некоторые проблемы:
-У меня нет способа иметь точки точек с разными уровнями отступа. Таким образом, у меня не может быть точки точки, которая говорит, скажем, «Классы», а затем имеет пару точек точки под этим, слегка отступом, которые говорят о том, что класс в одной точке, именования условностей в другой точке, и т.д. Я предположил бы, что решение будет иметь что-то делать с сделать некоторые новые элементы XML, такие как point2, которые будут отформатированы как:
- POINT
вместо
- POINT
(дополнительный элемент HTML, вызывающий отступ).
-Если в моем документе XML я определяю различные точки и кодовые блоки в определенном порядке (например, point, point, codeBlock, point, codeBlock, point), полученный HTML-файл после того, как таблица стилей XSLT выполняет свою работу имеет все точки, сгруппированные вместе, и ТОГДА все кодовые блоки (например, точки, точки, точки, точки, кода, кода). Я понимаю, ПОЧЕМУ это происходит; мой XSLT-документ пересекает все элементы XML и THEN через все элементы XML. Я предполагаю, что решение будет иметь какое-то отношение к прохождению всех дочерних узлов элемента и выведение одной вещи, если следующий элемент является элементом, и вывод другой вещи, если следующий элемент является элементом.
Любые идеи? Не стесняйтесь предлагать реструктуризацию документов XML или XSLT. Может быть, я должен использовать атрибуты для отступов или различать точки и codeBlocks?
Thankyou !!
Я в страхе ... все работает отлично! Спасибо за быстрый ответ! Я читаю это сейчас и пытаюсь понять это - я также рассмотрю некоторые учебники для шаблонов. Еще раз спасибо! – Luke